'use strict';

var cloneDeep = require('lodash/cloneDeep');
var manage = require('@/api/manage');
var ylyFormConstants = require('yly-form-source/lib/yly-form-constants');
var VxeGridMixin = require('@/mixins/VxeGridMixin');

var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};

function getDefaultExportFromCjs (x) {
	return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}

var check = function (it) {
    return it && it.Math === Math && it;
};
var globalThis_1 = check(typeof globalThis == 'object' && globalThis) || check(typeof window == 'object' && window) || check(typeof self == 'object' && self) || check(typeof commonjsGlobal == 'object' && commonjsGlobal) || check(typeof commonjsGlobal == 'object' && commonjsGlobal) || (function () {
    return this;
})() || Function('return this')();
getDefaultExportFromCjs(globalThis_1);

var sharedStore = {exports: {}};

var globalThis$f = globalThis_1;
var defineProperty$b = Object.defineProperty;
var defineGlobalProperty$1 = function (key, value) {
    try {
        defineProperty$b(globalThis$f, key, {
            value: value,
            configurable: true,
            writable: true
        });
    } catch (error) {
        globalThis$f[key] = value;
    }
    return value;
};
getDefaultExportFromCjs(defineGlobalProperty$1);

var globalThis$e = globalThis_1;
var defineGlobalProperty = defineGlobalProperty$1;
var SHARED = '__core-js_shared__';
var store$3 = sharedStore.exports = globalThis$e[SHARED] || defineGlobalProperty(SHARED, {});
(store$3.versions || (store$3.versions = [])).push({
    version: '3.38.1',
    mode: 'pure' ,
    copyright: '© 2014-2024 Denis Pushkarev (zloirock.ru)',
    license: 'https://github.com/zloirock/core-js/blob/v3.38.1/LICENSE',
    source: 'https://github.com/zloirock/core-js'
});
var sharedStoreExports = sharedStore.exports;
getDefaultExportFromCjs(sharedStoreExports);

var store$2 = sharedStoreExports;
var shared$7 = function (key, value) {
    return store$2[key] || (store$2[key] = value || ({}));
};
getDefaultExportFromCjs(shared$7);

var fails$n = function (exec) {
    try {
        return !!exec();
    } catch (error) {
        return true;
    }
};
getDefaultExportFromCjs(fails$n);

var fails$m = fails$n;
var functionBindNative = !fails$m(function () {
    var test = (function () {}).bind();
    return typeof test != 'function' || test.hasOwnProperty('prototype');
});
getDefaultExportFromCjs(functionBindNative);

var NATIVE_BIND$4 = functionBindNative;
var FunctionPrototype$4 = Function.prototype;
var call$d = FunctionPrototype$4.call;
var uncurryThisWithBind = NATIVE_BIND$4 && FunctionPrototype$4.bind.bind(call$d, call$d);
var functionUncurryThis = NATIVE_BIND$4 ? uncurryThisWithBind : function (fn) {
    return function () {
        return call$d.apply(fn, arguments);
    };
};
getDefaultExportFromCjs(functionUncurryThis);

var isNullOrUndefined$3 = function (it) {
    return it === null || it === undefined;
};
getDefaultExportFromCjs(isNullOrUndefined$3);

var isNullOrUndefined$2 = isNullOrUndefined$3;
var $TypeError$a = TypeError;
var requireObjectCoercible$7 = function (it) {
    if (isNullOrUndefined$2(it)) throw new $TypeError$a("Can't call method on " + it);
    return it;
};
getDefaultExportFromCjs(requireObjectCoercible$7);

var requireObjectCoercible$6 = requireObjectCoercible$7;
var $Object$4 = Object;
var toObject$a = function (argument) {
    return $Object$4(requireObjectCoercible$6(argument));
};
getDefaultExportFromCjs(toObject$a);

var uncurryThis$p = functionUncurryThis;
var toObject$9 = toObject$a;
var hasOwnProperty = uncurryThis$p(({}).hasOwnProperty);
var hasOwnProperty_1 = Object.hasOwn || (function hasOwn(it, key) {
    return hasOwnProperty(toObject$9(it), key);
});
getDefaultExportFromCjs(hasOwnProperty_1);

var uncurryThis$o = functionUncurryThis;
var id = 0;
var postfix = Math.random();
var toString$a = uncurryThis$o((1.0).toString);
var uid$3 = function (key) {
    return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString$a(++id + postfix, 36);
};
getDefaultExportFromCjs(uid$3);

var globalThis$d = globalThis_1;
var navigator$1 = globalThis$d.navigator;
var userAgent$1 = navigator$1 && navigator$1.userAgent;
var environmentUserAgent = userAgent$1 ? String(userAgent$1) : '';
getDefaultExportFromCjs(environmentUserAgent);

var globalThis$c = globalThis_1;
var userAgent = environmentUserAgent;
var process = globalThis$c.process;
var Deno = globalThis$c.Deno;
var versions = process && process.versions || Deno && Deno.version;
var v8 = versions && versions.v8;
var match, version;
if (v8) {
    match = v8.split('.');
    version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);
}
if (!version && userAgent) {
    match = userAgent.match(/Edge\/(\d+)/);
    if (!match || match[1] >= 74) {
        match = userAgent.match(/Chrome\/(\d+)/);
        if (match) version = +match[1];
    }
}
var environmentV8Version = version;
getDefaultExportFromCjs(environmentV8Version);

var V8_VERSION$2 = environmentV8Version;
var fails$l = fails$n;
var globalThis$b = globalThis_1;
var $String$5 = globalThis$b.String;
var symbolConstructorDetection = !!Object.getOwnPropertySymbols && !fails$l(function () {
    var symbol = Symbol('symbol detection');
    return !$String$5(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION$2 && V8_VERSION$2 < 41;
});
getDefaultExportFromCjs(symbolConstructorDetection);

var NATIVE_SYMBOL$5 = symbolConstructorDetection;
var useSymbolAsUid = NATIVE_SYMBOL$5 && !Symbol.sham && typeof Symbol.iterator == 'symbol';
getDefaultExportFromCjs(useSymbolAsUid);

var globalThis$a = globalThis_1;
var shared$6 = shared$7;
var hasOwn$d = hasOwnProperty_1;
var uid$2 = uid$3;
var NATIVE_SYMBOL$4 = symbolConstructorDetection;
var USE_SYMBOL_AS_UID$1 = useSymbolAsUid;
var Symbol$3 = globalThis$a.Symbol;
var WellKnownSymbolsStore$2 = shared$6('wks');
var createWellKnownSymbol = USE_SYMBOL_AS_UID$1 ? Symbol$3['for'] || Symbol$3 : Symbol$3 && Symbol$3.withoutSetter || uid$2;
var wellKnownSymbol$k = function (name) {
    if (!hasOwn$d(WellKnownSymbolsStore$2, name)) {
        WellKnownSymbolsStore$2[name] = NATIVE_SYMBOL$4 && hasOwn$d(Symbol$3, name) ? Symbol$3[name] : createWellKnownSymbol('Symbol.' + name);
    }
    return WellKnownSymbolsStore$2[name];
};
getDefaultExportFromCjs(wellKnownSymbol$k);

var wellKnownSymbol$j = wellKnownSymbol$k;
var TO_STRING_TAG$2 = wellKnownSymbol$j('toStringTag');
var test = {};
test[TO_STRING_TAG$2] = 'z';
var toStringTagSupport = String(test) === '[object z]';
getDefaultExportFromCjs(toStringTagSupport);

var documentAll = typeof document == 'object' && document.all;
var isCallable$f = typeof documentAll == 'undefined' && documentAll !== undefined ? function (argument) {
    return typeof argument == 'function' || argument === documentAll;
} : function (argument) {
    return typeof argument == 'function';
};
getDefaultExportFromCjs(isCallable$f);

var uncurryThis$n = functionUncurryThis;
var toString$9 = uncurryThis$n(({}).toString);
var stringSlice$2 = uncurryThis$n(('').slice);
var classofRaw$2 = function (it) {
    return stringSlice$2(toString$9(it), 8, -1);
};
getDefaultExportFromCjs(classofRaw$2);

var TO_STRING_TAG_SUPPORT$2 = toStringTagSupport;
var isCallable$e = isCallable$f;
var classofRaw$1 = classofRaw$2;
var wellKnownSymbol$i = wellKnownSymbol$k;
var TO_STRING_TAG$1 = wellKnownSymbol$i('toStringTag');
var $Object$3 = Object;
var CORRECT_ARGUMENTS = classofRaw$1((function () {
    return arguments;
})()) === 'Arguments';
var tryGet = function (it, key) {
    try {
        return it[key];
    } catch (error) {}
};
var classof$b = TO_STRING_TAG_SUPPORT$2 ? classofRaw$1 : function (it) {
    var O, tag, result;
    return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (tag = tryGet(O = $Object$3(it), TO_STRING_TAG$1)) == 'string' ? tag : CORRECT_ARGUMENTS ? classofRaw$1(O) : (result = classofRaw$1(O)) === 'Object' && isCallable$e(O.callee) ? 'Arguments' : result;
};
getDefaultExportFromCjs(classof$b);

var uncurryThis$m = functionUncurryThis;
var objectIsPrototypeOf = uncurryThis$m(({}).isPrototypeOf);
getDefaultExportFromCjs(objectIsPrototypeOf);

var NATIVE_BIND$3 = functionBindNative;
var FunctionPrototype$3 = Function.prototype;
var apply$4 = FunctionPrototype$3.apply;
var call$c = FunctionPrototype$3.call;
var functionApply = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND$3 ? call$c.bind(apply$4) : function () {
    return call$c.apply(apply$4, arguments);
});
getDefaultExportFromCjs(functionApply);

var classofRaw = classofRaw$2;
var uncurryThis$l = functionUncurryThis;
var functionUncurryThisClause = function (fn) {
    if (classofRaw(fn) === 'Function') return uncurryThis$l(fn);
};
getDefaultExportFromCjs(functionUncurryThisClause);

var objectGetOwnPropertyDescriptor = {};

var fails$k = fails$n;
var descriptors = !fails$k(function () {
    return Object.defineProperty({}, 1, {
        get: function () {
            return 7;
        }
    })[1] !== 7;
});
getDefaultExportFromCjs(descriptors);

var NATIVE_BIND$2 = functionBindNative;
var call$b = Function.prototype.call;
var functionCall = NATIVE_BIND$2 ? call$b.bind(call$b) : function () {
    return call$b.apply(call$b, arguments);
};
getDefaultExportFromCjs(functionCall);

var objectPropertyIsEnumerable = {};

var $propertyIsEnumerable$1 = ({}).propertyIsEnumerable;
var getOwnPropertyDescriptor$5 = Object.getOwnPropertyDescriptor;
var NASHORN_BUG = getOwnPropertyDescriptor$5 && !$propertyIsEnumerable$1.call({
    1: 2
}, 1);
objectPropertyIsEnumerable.f = NASHORN_BUG ? function propertyIsEnumerable(V) {
    var descriptor = getOwnPropertyDescriptor$5(this, V);
    return !!descriptor && descriptor.enumerable;
} : $propertyIsEnumerable$1;

var createPropertyDescriptor$5 = function (bitmap, value) {
    return {
        enumerable: !(bitmap & 1),
        configurable: !(bitmap & 2),
        writable: !(bitmap & 4),
        value: value
    };
};
getDefaultExportFromCjs(createPropertyDescriptor$5);

var uncurryThis$k = functionUncurryThis;
var fails$j = fails$n;
var classof$a = classofRaw$2;
var $Object$2 = Object;
var split = uncurryThis$k(('').split);
var indexedObject = fails$j(function () {
    return !$Object$2('z').propertyIsEnumerable(0);
}) ? function (it) {
    return classof$a(it) === 'String' ? split(it, '') : $Object$2(it);
} : $Object$2;
getDefaultExportFromCjs(indexedObject);

var IndexedObject$1 = indexedObject;
var requireObjectCoercible$5 = requireObjectCoercible$7;
var toIndexedObject$a = function (it) {
    return IndexedObject$1(requireObjectCoercible$5(it));
};
getDefaultExportFromCjs(toIndexedObject$a);

var isCallable$d = isCallable$f;
var isObject$e = function (it) {
    return typeof it == 'object' ? it !== null : isCallable$d(it);
};
getDefaultExportFromCjs(isObject$e);

var path$g = {};
getDefaultExportFromCjs(path$g);

var path$f = path$g;
var globalThis$9 = globalThis_1;
var isCallable$c = isCallable$f;
var aFunction = function (variable) {
    return isCallable$c(variable) ? variable : undefined;
};
var getBuiltIn$b = function (namespace, method) {
    return arguments.length < 2 ? aFunction(path$f[namespace]) || aFunction(globalThis$9[namespace]) : path$f[namespace] && path$f[namespace][method] || globalThis$9[namespace] && globalThis$9[namespace][method];
};
getDefaultExportFromCjs(getBuiltIn$b);

var getBuiltIn$a = getBuiltIn$b;
var isCallable$b = isCallable$f;
var isPrototypeOf$b = objectIsPrototypeOf;
var USE_SYMBOL_AS_UID = useSymbolAsUid;
var $Object$1 = Object;
var isSymbol$5 = USE_SYMBOL_AS_UID ? function (it) {
    return typeof it == 'symbol';
} : function (it) {
    var $Symbol = getBuiltIn$a('Symbol');
    return isCallable$b($Symbol) && isPrototypeOf$b($Symbol.prototype, $Object$1(it));
};
getDefaultExportFromCjs(isSymbol$5);

var $String$4 = String;
var tryToString$4 = function (argument) {
    try {
        return $String$4(argument);
    } catch (error) {
        return 'Object';
    }
};
getDefaultExportFromCjs(tryToString$4);

var isCallable$a = isCallable$f;
var tryToString$3 = tryToString$4;
var $TypeError$9 = TypeError;
var aCallable$6 = function (argument) {
    if (isCallable$a(argument)) return argument;
    throw new $TypeError$9(tryToString$3(argument) + ' is not a function');
};
getDefaultExportFromCjs(aCallable$6);

var aCallable$5 = aCallable$6;
var isNullOrUndefined$1 = isNullOrUndefined$3;
var getMethod$3 = function (V, P) {
    var func = V[P];
    return isNullOrUndefined$1(func) ? undefined : aCallable$5(func);
};
getDefaultExportFromCjs(getMethod$3);

var call$a = functionCall;
var isCallable$9 = isCallable$f;
var isObject$d = isObject$e;
var $TypeError$8 = TypeError;
var ordinaryToPrimitive$1 = function (input, pref) {
    var fn, val;
    if (pref === 'string' && isCallable$9(fn = input.toString) && !isObject$d(val = call$a(fn, input))) return val;
    if (isCallable$9(fn = input.valueOf) && !isObject$d(val = call$a(fn, input))) return val;
    if (pref !== 'string' && isCallable$9(fn = input.toString) && !isObject$d(val = call$a(fn, input))) return val;
    throw new $TypeError$8("Can't convert object to primitive value");
};
getDefaultExportFromCjs(ordinaryToPrimitive$1);

var call$9 = functionCall;
var isObject$c = isObject$e;
var isSymbol$4 = isSymbol$5;
var getMethod$2 = getMethod$3;
var ordinaryToPrimitive = ordinaryToPrimitive$1;
var wellKnownSymbol$h = wellKnownSymbol$k;
var $TypeError$7 = TypeError;
var TO_PRIMITIVE = wellKnownSymbol$h('toPrimitive');
var toPrimitive$8 = function (input, pref) {
    if (!isObject$c(input) || isSymbol$4(input)) return input;
    var exoticToPrim = getMethod$2(input, TO_PRIMITIVE);
    var result;
    if (exoticToPrim) {
        if (pref === undefined) pref = 'default';
        result = call$9(exoticToPrim, input, pref);
        if (!isObject$c(result) || isSymbol$4(result)) return result;
        throw new $TypeError$7("Can't convert object to primitive value");
    }
    if (pref === undefined) pref = 'number';
    return ordinaryToPrimitive(input, pref);
};
getDefaultExportFromCjs(toPrimitive$8);

var toPrimitive$7 = toPrimitive$8;
var isSymbol$3 = isSymbol$5;
var toPropertyKey$4 = function (argument) {
    var key = toPrimitive$7(argument, 'string');
    return isSymbol$3(key) ? key : key + '';
};
getDefaultExportFromCjs(toPropertyKey$4);

var globalThis$8 = globalThis_1;
var isObject$b = isObject$e;
var document$1 = globalThis$8.document;
var EXISTS$1 = isObject$b(document$1) && isObject$b(document$1.createElement);
var documentCreateElement$1 = function (it) {
    return EXISTS$1 ? document$1.createElement(it) : {};
};
getDefaultExportFromCjs(documentCreateElement$1);

var DESCRIPTORS$c = descriptors;
var fails$i = fails$n;
var createElement = documentCreateElement$1;
var ie8DomDefine = !DESCRIPTORS$c && !fails$i(function () {
    return Object.defineProperty(createElement('div'), 'a', {
        get: function () {
            return 7;
        }
    }).a !== 7;
});
getDefaultExportFromCjs(ie8DomDefine);

var DESCRIPTORS$b = descriptors;
var call$8 = functionCall;
var propertyIsEnumerableModule$1 = objectPropertyIsEnumerable;
var createPropertyDescriptor$4 = createPropertyDescriptor$5;
var toIndexedObject$9 = toIndexedObject$a;
var toPropertyKey$3 = toPropertyKey$4;
var hasOwn$c = hasOwnProperty_1;
var IE8_DOM_DEFINE$1 = ie8DomDefine;
var $getOwnPropertyDescriptor$2 = Object.getOwnPropertyDescriptor;
objectGetOwnPropertyDescriptor.f = DESCRIPTORS$b ? $getOwnPropertyDescriptor$2 : function getOwnPropertyDescriptor(O, P) {
    O = toIndexedObject$9(O);
    P = toPropertyKey$3(P);
    if (IE8_DOM_DEFINE$1) try {
        return $getOwnPropertyDescriptor$2(O, P);
    } catch (error) {}
    if (hasOwn$c(O, P)) return createPropertyDescriptor$4(!call$8(propertyIsEnumerableModule$1.f, O, P), O[P]);
};

var fails$h = fails$n;
var isCallable$8 = isCallable$f;
var replacement = /#|\.prototype\./;
var isForced$1 = function (feature, detection) {
    var value = data[normalize(feature)];
    return value === POLYFILL ? true : value === NATIVE ? false : isCallable$8(detection) ? fails$h(detection) : !!detection;
};
var normalize = isForced$1.normalize = function (string) {
    return String(string).replace(replacement, '.').toLowerCase();
};
var data = isForced$1.data = {};
var NATIVE = isForced$1.NATIVE = 'N';
var POLYFILL = isForced$1.POLYFILL = 'P';
var isForced_1 = isForced$1;
getDefaultExportFromCjs(isForced_1);

var uncurryThis$j = functionUncurryThisClause;
var aCallable$4 = aCallable$6;
var NATIVE_BIND$1 = functionBindNative;
var bind$c = uncurryThis$j(uncurryThis$j.bind);
var functionBindContext = function (fn, that) {
    aCallable$4(fn);
    return that === undefined ? fn : NATIVE_BIND$1 ? bind$c(fn, that) : function () {
        return fn.apply(that, arguments);
    };
};
getDefaultExportFromCjs(functionBindContext);

var objectDefineProperty = {};

var DESCRIPTORS$a = descriptors;
var fails$g = fails$n;
var v8PrototypeDefineBug = DESCRIPTORS$a && fails$g(function () {
    return Object.defineProperty(function () {}, 'prototype', {
        value: 42,
        writable: false
    }).prototype !== 42;
});
getDefaultExportFromCjs(v8PrototypeDefineBug);

var isObject$a = isObject$e;
var $String$3 = String;
var $TypeError$6 = TypeError;
var anObject$9 = function (argument) {
    if (isObject$a(argument)) return argument;
    throw new $TypeError$6($String$3(argument) + ' is not an object');
};
getDefaultExportFromCjs(anObject$9);

var DESCRIPTORS$9 = descriptors;
var IE8_DOM_DEFINE = ie8DomDefine;
var V8_PROTOTYPE_DEFINE_BUG$1 = v8PrototypeDefineBug;
var anObject$8 = anObject$9;
var toPropertyKey$2 = toPropertyKey$4;
var $TypeError$5 = TypeError;
var $defineProperty$1 = Object.defineProperty;
var $getOwnPropertyDescriptor$1 = Object.getOwnPropertyDescriptor;
var ENUMERABLE = 'enumerable';
var CONFIGURABLE$1 = 'configurable';
var WRITABLE = 'writable';
objectDefineProperty.f = DESCRIPTORS$9 ? V8_PROTOTYPE_DEFINE_BUG$1 ? function defineProperty(O, P, Attributes) {
    anObject$8(O);
    P = toPropertyKey$2(P);
    anObject$8(Attributes);
    if (typeof O === 'function' && P === 'prototype' && ('value' in Attributes) && (WRITABLE in Attributes) && !Attributes[WRITABLE]) {
        var current = $getOwnPropertyDescriptor$1(O, P);
        if (current && current[WRITABLE]) {
            O[P] = Attributes.value;
            Attributes = {
                configurable: (CONFIGURABLE$1 in Attributes) ? Attributes[CONFIGURABLE$1] : current[CONFIGURABLE$1],
                enumerable: (ENUMERABLE in Attributes) ? Attributes[ENUMERABLE] : current[ENUMERABLE],
                writable: false
            };
        }
    }
    return $defineProperty$1(O, P, Attributes);
} : $defineProperty$1 : function defineProperty(O, P, Attributes) {
    anObject$8(O);
    P = toPropertyKey$2(P);
    anObject$8(Attributes);
    if (IE8_DOM_DEFINE) try {
        return $defineProperty$1(O, P, Attributes);
    } catch (error) {}
    if (('get' in Attributes) || ('set' in Attributes)) throw new $TypeError$5('Accessors not supported');
    if (('value' in Attributes)) O[P] = Attributes.value;
    return O;
};

var DESCRIPTORS$8 = descriptors;
var definePropertyModule$3 = objectDefineProperty;
var createPropertyDescriptor$3 = createPropertyDescriptor$5;
var createNonEnumerableProperty$4 = DESCRIPTORS$8 ? function (object, key, value) {
    return definePropertyModule$3.f(object, key, createPropertyDescriptor$3(1, value));
} : function (object, key, value) {
    object[key] = value;
    return object;
};
getDefaultExportFromCjs(createNonEnumerableProperty$4);

var globalThis$7 = globalThis_1;
var apply$3 = functionApply;
var uncurryThis$i = functionUncurryThisClause;
var isCallable$7 = isCallable$f;
var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f;
var isForced = isForced_1;
var path$e = path$g;
var bind$b = functionBindContext;
var createNonEnumerableProperty$3 = createNonEnumerableProperty$4;
var hasOwn$b = hasOwnProperty_1;
var wrapConstructor = function (NativeConstructor) {
    var Wrapper = function (a, b, c) {
        if (this instanceof Wrapper) {
            switch (arguments.length) {
                case 0:
                    return new NativeConstructor();
                case 1:
                    return new NativeConstructor(a);
                case 2:
                    return new NativeConstructor(a, b);
            }
            return new NativeConstructor(a, b, c);
        }
        return apply$3(NativeConstructor, this, arguments);
    };
    Wrapper.prototype = NativeConstructor.prototype;
    return Wrapper;
};
var _export = function (options, source) {
    var TARGET = options.target;
    var GLOBAL = options.global;
    var STATIC = options.stat;
    var PROTO = options.proto;
    var nativeSource = GLOBAL ? globalThis$7 : STATIC ? globalThis$7[TARGET] : globalThis$7[TARGET] && globalThis$7[TARGET].prototype;
    var target = GLOBAL ? path$e : path$e[TARGET] || createNonEnumerableProperty$3(path$e, TARGET, {})[TARGET];
    var targetPrototype = target.prototype;
    var FORCED, USE_NATIVE, VIRTUAL_PROTOTYPE;
    var key, sourceProperty, targetProperty, nativeProperty, resultProperty, descriptor;
    for (key in source) {
        FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);
        USE_NATIVE = !FORCED && nativeSource && hasOwn$b(nativeSource, key);
        targetProperty = target[key];
        if (USE_NATIVE) if (options.dontCallGetSet) {
            descriptor = getOwnPropertyDescriptor$4(nativeSource, key);
            nativeProperty = descriptor && descriptor.value;
        } else nativeProperty = nativeSource[key];
        sourceProperty = USE_NATIVE && nativeProperty ? nativeProperty : source[key];
        if (!FORCED && !PROTO && typeof targetProperty == typeof sourceProperty) continue;
        if (options.bind && USE_NATIVE) resultProperty = bind$b(sourceProperty, globalThis$7); else if (options.wrap && USE_NATIVE) resultProperty = wrapConstructor(sourceProperty); else if (PROTO && isCallable$7(sourceProperty)) resultProperty = uncurryThis$i(sourceProperty); else resultProperty = sourceProperty;
        if (options.sham || sourceProperty && sourceProperty.sham || targetProperty && targetProperty.sham) {
            createNonEnumerableProperty$3(resultProperty, 'sham', true);
        }
        createNonEnumerableProperty$3(target, key, resultProperty);
        if (PROTO) {
            VIRTUAL_PROTOTYPE = TARGET + 'Prototype';
            if (!hasOwn$b(path$e, VIRTUAL_PROTOTYPE)) {
                createNonEnumerableProperty$3(path$e, VIRTUAL_PROTOTYPE, {});
            }
            createNonEnumerableProperty$3(path$e[VIRTUAL_PROTOTYPE], key, sourceProperty);
            if (options.real && targetPrototype && (FORCED || !targetPrototype[key])) {
                createNonEnumerableProperty$3(targetPrototype, key, sourceProperty);
            }
        }
    }
};
getDefaultExportFromCjs(_export);

var ceil$1 = Math.ceil;
var floor = Math.floor;
var mathTrunc = Math.trunc || (function trunc(x) {
    var n = +x;
    return (n > 0 ? floor : ceil$1)(n);
});
getDefaultExportFromCjs(mathTrunc);

var trunc = mathTrunc;
var toIntegerOrInfinity$4 = function (argument) {
    var number = +argument;
    return number !== number || number === 0 ? 0 : trunc(number);
};
getDefaultExportFromCjs(toIntegerOrInfinity$4);

var toIntegerOrInfinity$3 = toIntegerOrInfinity$4;
var min$1 = Math.min;
var toLength$2 = function (argument) {
    var len = toIntegerOrInfinity$3(argument);
    return len > 0 ? min$1(len, 0x1FFFFFFFFFFFFF) : 0;
};
getDefaultExportFromCjs(toLength$2);

var toLength$1 = toLength$2;
var lengthOfArrayLike$7 = function (obj) {
    return toLength$1(obj.length);
};
getDefaultExportFromCjs(lengthOfArrayLike$7);

var classof$9 = classofRaw$2;
var isArray$5 = Array.isArray || (function isArray(argument) {
    return classof$9(argument) === 'Array';
});
getDefaultExportFromCjs(isArray$5);

var uncurryThis$h = functionUncurryThis;
var isCallable$6 = isCallable$f;
var store$1 = sharedStoreExports;
var functionToString = uncurryThis$h(Function.toString);
if (!isCallable$6(store$1.inspectSource)) {
    store$1.inspectSource = function (it) {
        return functionToString(it);
    };
}
var inspectSource$1 = store$1.inspectSource;
getDefaultExportFromCjs(inspectSource$1);

var uncurryThis$g = functionUncurryThis;
var fails$f = fails$n;
var isCallable$5 = isCallable$f;
var classof$8 = classof$b;
var getBuiltIn$9 = getBuiltIn$b;
var inspectSource = inspectSource$1;
var noop = function () {};
var construct$4 = getBuiltIn$9('Reflect', 'construct');
var constructorRegExp = /^\s*(?:class|function)\b/;
var exec$1 = uncurryThis$g(constructorRegExp.exec);
var INCORRECT_TO_STRING = !constructorRegExp.test(noop);
var isConstructorModern = function isConstructor(argument) {
    if (!isCallable$5(argument)) return false;
    try {
        construct$4(noop, [], argument);
        return true;
    } catch (error) {
        return false;
    }
};
var isConstructorLegacy = function isConstructor(argument) {
    if (!isCallable$5(argument)) return false;
    switch (classof$8(argument)) {
        case 'AsyncFunction':
        case 'GeneratorFunction':
        case 'AsyncGeneratorFunction':
            return false;
    }
    try {
        return INCORRECT_TO_STRING || !!exec$1(constructorRegExp, inspectSource(argument));
    } catch (error) {
        return true;
    }
};
isConstructorLegacy.sham = true;
var isConstructor$4 = !construct$4 || fails$f(function () {
    var called;
    return isConstructorModern(isConstructorModern.call) || !isConstructorModern(Object) || !isConstructorModern(function () {
        called = true;
    }) || called;
}) ? isConstructorLegacy : isConstructorModern;
getDefaultExportFromCjs(isConstructor$4);

var isArray$4 = isArray$5;
var isConstructor$3 = isConstructor$4;
var isObject$9 = isObject$e;
var wellKnownSymbol$g = wellKnownSymbol$k;
var SPECIES$2 = wellKnownSymbol$g('species');
var $Array$2 = Array;
var arraySpeciesConstructor$1 = function (originalArray) {
    var C;
    if (isArray$4(originalArray)) {
        C = originalArray.constructor;
        if (isConstructor$3(C) && (C === $Array$2 || isArray$4(C.prototype))) C = undefined; else if (isObject$9(C)) {
            C = C[SPECIES$2];
            if (C === null) C = undefined;
        }
    }
    return C === undefined ? $Array$2 : C;
};
getDefaultExportFromCjs(arraySpeciesConstructor$1);

var arraySpeciesConstructor = arraySpeciesConstructor$1;
var arraySpeciesCreate$3 = function (originalArray, length) {
    return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);
};
getDefaultExportFromCjs(arraySpeciesCreate$3);

var bind$a = functionBindContext;
var uncurryThis$f = functionUncurryThis;
var IndexedObject = indexedObject;
var toObject$8 = toObject$a;
var lengthOfArrayLike$6 = lengthOfArrayLike$7;
var arraySpeciesCreate$2 = arraySpeciesCreate$3;
var push$4 = uncurryThis$f([].push);
var createMethod$3 = function (TYPE) {
    var IS_MAP = TYPE === 1;
    var IS_FILTER = TYPE === 2;
    var IS_SOME = TYPE === 3;
    var IS_EVERY = TYPE === 4;
    var IS_FIND_INDEX = TYPE === 6;
    var IS_FILTER_REJECT = TYPE === 7;
    var NO_HOLES = TYPE === 5 || IS_FIND_INDEX;
    return function ($this, callbackfn, that, specificCreate) {
        var O = toObject$8($this);
        var self = IndexedObject(O);
        var length = lengthOfArrayLike$6(self);
        var boundFunction = bind$a(callbackfn, that);
        var index = 0;
        var create = specificCreate || arraySpeciesCreate$2;
        var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;
        var value, result;
        for (; length > index; index++) if (NO_HOLES || (index in self)) {
            value = self[index];
            result = boundFunction(value, index, O);
            if (TYPE) {
                if (IS_MAP) target[index] = result; else if (result) switch (TYPE) {
                    case 3:
                        return true;
                    case 5:
                        return value;
                    case 6:
                        return index;
                    case 2:
                        push$4(target, value);
                } else switch (TYPE) {
                    case 4:
                        return false;
                    case 7:
                        push$4(target, value);
                }
            }
        }
        return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
    };
};
var arrayIteration = {
    forEach: createMethod$3(0),
    map: createMethod$3(1),
    filter: createMethod$3(2),
    some: createMethod$3(3),
    every: createMethod$3(4),
    find: createMethod$3(5),
    findIndex: createMethod$3(6),
    filterReject: createMethod$3(7)
};
getDefaultExportFromCjs(arrayIteration);

var fails$e = fails$n;
var arrayMethodIsStrict$2 = function (METHOD_NAME, argument) {
    var method = [][METHOD_NAME];
    return !!method && fails$e(function () {
        method.call(null, argument || (function () {
            return 1;
        }), 1);
    });
};
getDefaultExportFromCjs(arrayMethodIsStrict$2);

var $forEach$1 = arrayIteration.forEach;
var arrayMethodIsStrict$1 = arrayMethodIsStrict$2;
var STRICT_METHOD = arrayMethodIsStrict$1('forEach');
var arrayForEach = !STRICT_METHOD ? function forEach(callbackfn) {
    return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
} : [].forEach;
getDefaultExportFromCjs(arrayForEach);

var $$u = _export;
var forEach$4 = arrayForEach;
$$u({
    target: 'Array',
    proto: true,
    forced: [].forEach !== forEach$4
}, {
    forEach: forEach$4
});

var globalThis$6 = globalThis_1;
var path$d = path$g;
var getBuiltInPrototypeMethod$b = function (CONSTRUCTOR, METHOD) {
    var Namespace = path$d[CONSTRUCTOR + 'Prototype'];
    var pureMethod = Namespace && Namespace[METHOD];
    if (pureMethod) return pureMethod;
    var NativeConstructor = globalThis$6[CONSTRUCTOR];
    var NativePrototype = NativeConstructor && NativeConstructor.prototype;
    return NativePrototype && NativePrototype[METHOD];
};
getDefaultExportFromCjs(getBuiltInPrototypeMethod$b);

var getBuiltInPrototypeMethod$a = getBuiltInPrototypeMethod$b;
var forEach$3 = getBuiltInPrototypeMethod$a('Array', 'forEach');
getDefaultExportFromCjs(forEach$3);

var parent$G = forEach$3;
var forEach$2 = parent$G;
getDefaultExportFromCjs(forEach$2);

var classof$7 = classof$b;
var hasOwn$a = hasOwnProperty_1;
var isPrototypeOf$a = objectIsPrototypeOf;
var method$8 = forEach$2;
var ArrayPrototype$9 = Array.prototype;
var DOMIterables$1 = {
    DOMTokenList: true,
    NodeList: true
};
var forEach$1 = function (it) {
    var own = it.forEach;
    return it === ArrayPrototype$9 || isPrototypeOf$a(ArrayPrototype$9, it) && own === ArrayPrototype$9.forEach || hasOwn$a(DOMIterables$1, classof$7(it)) ? method$8 : own;
};
getDefaultExportFromCjs(forEach$1);

var forEach = forEach$1;
var _forEachInstanceProperty = getDefaultExportFromCjs(forEach);

var toIntegerOrInfinity$2 = toIntegerOrInfinity$4;
var max$1 = Math.max;
var min = Math.min;
var toAbsoluteIndex$2 = function (index, length) {
    var integer = toIntegerOrInfinity$2(index);
    return integer < 0 ? max$1(integer + length, 0) : min(integer, length);
};
getDefaultExportFromCjs(toAbsoluteIndex$2);

var toIndexedObject$8 = toIndexedObject$a;
var toAbsoluteIndex$1 = toAbsoluteIndex$2;
var lengthOfArrayLike$5 = lengthOfArrayLike$7;
var createMethod$2 = function (IS_INCLUDES) {
    return function ($this, el, fromIndex) {
        var O = toIndexedObject$8($this);
        var length = lengthOfArrayLike$5(O);
        if (length === 0) return !IS_INCLUDES && -1;
        var index = toAbsoluteIndex$1(fromIndex, length);
        var value;
        if (IS_INCLUDES && el !== el) while (length > index) {
            value = O[index++];
            if (value !== value) return true;
        } else for (; length > index; index++) {
            if ((IS_INCLUDES || (index in O)) && O[index] === el) return IS_INCLUDES || index || 0;
        }
        return !IS_INCLUDES && -1;
    };
};
var arrayIncludes = {
    includes: createMethod$2(true),
    indexOf: createMethod$2(false)
};
getDefaultExportFromCjs(arrayIncludes);

var $$t = _export;
var $includes = arrayIncludes.includes;
var fails$d = fails$n;
var BROKEN_ON_SPARSE = fails$d(function () {
    return !Array(1).includes();
});
$$t({
    target: 'Array',
    proto: true,
    forced: BROKEN_ON_SPARSE
}, {
    includes: function includes(el) {
        return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
    }
});

var getBuiltInPrototypeMethod$9 = getBuiltInPrototypeMethod$b;
var includes$4 = getBuiltInPrototypeMethod$9('Array', 'includes');
getDefaultExportFromCjs(includes$4);

var isObject$8 = isObject$e;
var classof$6 = classofRaw$2;
var wellKnownSymbol$f = wellKnownSymbol$k;
var MATCH$1 = wellKnownSymbol$f('match');
var isRegexp = function (it) {
    var isRegExp;
    return isObject$8(it) && ((isRegExp = it[MATCH$1]) !== undefined ? !!isRegExp : classof$6(it) === 'RegExp');
};
getDefaultExportFromCjs(isRegexp);

var isRegExp = isRegexp;
var $TypeError$4 = TypeError;
var notARegexp = function (it) {
    if (isRegExp(it)) {
        throw new $TypeError$4("The method doesn't accept regular expressions");
    }
    return it;
};
getDefaultExportFromCjs(notARegexp);

var classof$5 = classof$b;
var $String$2 = String;
var toString$8 = function (argument) {
    if (classof$5(argument) === 'Symbol') throw new TypeError('Cannot convert a Symbol value to a string');
    return $String$2(argument);
};
getDefaultExportFromCjs(toString$8);

var wellKnownSymbol$e = wellKnownSymbol$k;
var MATCH = wellKnownSymbol$e('match');
var correctIsRegexpLogic = function (METHOD_NAME) {
    var regexp = /./;
    try {
        ('/./')[METHOD_NAME](regexp);
    } catch (error1) {
        try {
            regexp[MATCH] = false;
            return ('/./')[METHOD_NAME](regexp);
        } catch (error2) {}
    }
    return false;
};
getDefaultExportFromCjs(correctIsRegexpLogic);

var $$s = _export;
var uncurryThis$e = functionUncurryThis;
var notARegExp = notARegexp;
var requireObjectCoercible$4 = requireObjectCoercible$7;
var toString$7 = toString$8;
var correctIsRegExpLogic = correctIsRegexpLogic;
var stringIndexOf = uncurryThis$e(('').indexOf);
$$s({
    target: 'String',
    proto: true,
    forced: !correctIsRegExpLogic('includes')
}, {
    includes: function includes(searchString) {
        return !!~stringIndexOf(toString$7(requireObjectCoercible$4(this)), toString$7(notARegExp(searchString)), arguments.length > 1 ? arguments[1] : undefined);
    }
});

var getBuiltInPrototypeMethod$8 = getBuiltInPrototypeMethod$b;
var includes$3 = getBuiltInPrototypeMethod$8('String', 'includes');
getDefaultExportFromCjs(includes$3);

var isPrototypeOf$9 = objectIsPrototypeOf;
var arrayMethod = includes$4;
var stringMethod = includes$3;
var ArrayPrototype$8 = Array.prototype;
var StringPrototype = String.prototype;
var includes$2 = function (it) {
    var own = it.includes;
    if (it === ArrayPrototype$8 || isPrototypeOf$9(ArrayPrototype$8, it) && own === ArrayPrototype$8.includes) return arrayMethod;
    if (typeof it == 'string' || it === StringPrototype || isPrototypeOf$9(StringPrototype, it) && own === StringPrototype.includes) {
        return stringMethod;
    }
    return own;
};
getDefaultExportFromCjs(includes$2);

var parent$F = includes$2;
var includes$1 = parent$F;
getDefaultExportFromCjs(includes$1);

var includes = includes$1;
var _includesInstanceProperty = getDefaultExportFromCjs(includes);

var editorComponentMixin = {
    props: {
        selectItem: {
            type: Object,
            required: false,
            default: function _default() {
                return {};
            }
        },
        options: {
            type: Object,
            default: function _default() {
                return {};
            }
        },
        editorInfo: {
            type: Object,
            default: function _default() {
                return {};
            }
        },
        formSource: {
            type: Object,
            default: function _default() {
                return {};
            }
        }
    },
    data: function data() {
        return {};
    },
    computed: {
        editorValue: {
            get: function get() {
                return this.selectItem[this.editorInfo.configField];
            },
            set: function set(val) {
                this.$set(this.selectItem, this.editorInfo.configField, val);
            }
        },
        alreadyBindFieldList: function alreadyBindFieldList() {
            return this.formSource.formDataControl && this.formSource.formDataControl.alreadyBindFieldList || [];
        },
        formPageConfig: function formPageConfig() {
            return this.formSource.formDataControl && this.formSource.formDataControl.formPageConfig;
        }
    },
    methods: {
        updateSelectConfigByField: function updateSelectConfigByField(field, value) {
            if (this.editorInfo.allowField && Array.isArray(this.editorInfo.allowField)) {
                var _context;
                if (!_includesInstanceProperty(_context = this.editorInfo.allowField).call(_context, field)) {
                    throw new Error('无法更新selectItem中未定义的属性配置');
                }
                this.$set(this.selectItem, field, value);
                this.$forceUpdate();
            }
        },
        getSelectConfigByField: function getSelectConfigByField(field) {
            return this.selectItem[field];
        }
    }
};

var script$U = {
    name: 'CountStatistics',
    mixins: [editorComponentMixin],
    props: {},
    computed: {}
};

function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
    if (typeof shadowMode !== 'boolean') {
        createInjectorSSR = createInjector;
        createInjector = shadowMode;
        shadowMode = false;
    }
    // Vue.extend constructor export interop.
    var options = typeof script === 'function' ? script.options : script;
    // render functions
    if (template && template.render) {
        options.render = template.render;
        options.staticRenderFns = template.staticRenderFns;
        options._compiled = true;
        // functional template
        if (isFunctionalTemplate) {
            options.functional = true;
        }
    }
    // scopedId
    if (scopeId) {
        options._scopeId = scopeId;
    }
    let hook;
    if (moduleIdentifier) {
        // server build
        hook = function (context) {
            // 2.3 injection
            context =
                context || // cached call
                    (this.$vnode && this.$vnode.ssrContext) || // stateful
                    (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional
            // 2.2 with runInNewContext: true
            if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
                context = __VUE_SSR_CONTEXT__;
            }
            // inject component styles
            if (style) {
                style.call(this, createInjectorSSR(context));
            }
            // register component module identifier for async chunk inference
            if (context && context._registeredComponents) {
                context._registeredComponents.add(moduleIdentifier);
            }
        };
        // used by ssr in case component is cached and beforeCreate
        // never gets called
        options._ssrRegister = hook;
    }
    else if (style) {
        hook = shadowMode
            ? function (context) {
                style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));
            }
            : function (context) {
                style.call(this, createInjector(context));
            };
    }
    if (hook) {
        if (options.functional) {
            // register for functional component in vue file
            var originalRender = options.render;
            options.render = function renderWithStyleInjection(h, context) {
                hook.call(context);
                return originalRender(h, context);
            };
        }
        else {
            // inject component registration as beforeCreate hook
            var existing = options.beforeCreate;
            options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
        }
    }
    return script;
}

/* script */ var __vue_script__$U = script$U;
/* template */
var __vue_render__$U = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: "是否计数统计" } },
    [
      _c("a-switch", {
        attrs: { placeholder: "请输入", size: "small" },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$U = [];
__vue_render__$U._withStripped = true;

  /* style */
  var __vue_inject_styles__$U = undefined;
  /* scoped */
  var __vue_scope_id__$U = undefined;
  /* module identifier */
  var __vue_module_identifier__$U = undefined;
  /* functional template */
  var __vue_is_functional_template__$U = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$U = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$U, staticRenderFns: __vue_staticRenderFns__$U },
    __vue_inject_styles__$U,
    __vue_script__$U,
    __vue_scope_id__$U,
    __vue_is_functional_template__$U,
    __vue_module_identifier__$U,
    false,
    undefined,
    undefined,
    undefined
  );

var script$T = {
    name: 'AfterSaveReset',
    mixins: [editorComponentMixin],
    props: {
        options: {
            type: Object,
            default() {
                return {};
            }
        }
    },
    computed: {}
};

/* script */ var __vue_script__$T = script$T;

/* template */
var __vue_render__$T = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: "保存后不清空" } },
    [
      _c("a-switch", {
        attrs: { placeholder: "请输入", size: "small" },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$T = [];
__vue_render__$T._withStripped = true;

  /* style */
  var __vue_inject_styles__$T = undefined;
  /* scoped */
  var __vue_scope_id__$T = undefined;
  /* module identifier */
  var __vue_module_identifier__$T = undefined;
  /* functional template */
  var __vue_is_functional_template__$T = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$T = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$T, staticRenderFns: __vue_staticRenderFns__$T },
    __vue_inject_styles__$T,
    __vue_script__$T,
    __vue_scope_id__$T,
    __vue_is_functional_template__$T,
    __vue_module_identifier__$T,
    false,
    undefined,
    undefined,
    undefined
  );

var script$S = {
    name: 'ConfigOpenTypeConfig',
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$S = script$S;
/* template */
var __vue_render__$S = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c("div")
};
var __vue_staticRenderFns__$S = [];
__vue_render__$S._withStripped = true;

  /* style */
  var __vue_inject_styles__$S = undefined;
  /* scoped */
  var __vue_scope_id__$S = undefined;
  /* module identifier */
  var __vue_module_identifier__$S = undefined;
  /* functional template */
  var __vue_is_functional_template__$S = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$S = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$S, staticRenderFns: __vue_staticRenderFns__$S },
    __vue_inject_styles__$S,
    __vue_script__$S,
    __vue_scope_id__$S,
    __vue_is_functional_template__$S,
    __vue_module_identifier__$S,
    false,
    undefined,
    undefined,
    undefined
  );

var script$R = {
    name: 'LinkedOrderConfig',
    inject: ['getFormAllComponentList'],
    props: {
        selectItem: {
            type: Object,
            default() {}
        },
        editorConfig: {
            type: Object,
            default() {}
        }
    },
    data() {
        return {};
    },
    computed: {
        formAllComponentList() {
            if (typeof this.getFormAllComponentList === 'function') {
                var formAllComponentList = this.getFormAllComponentList() || [];
                return formAllComponentList.filter(item => !['card', 'grid'].includes(item.type));
            }
            return [];
        },
        modelValue: {
            get() {
                return this.selectItem[this.editorConfig.configProperty];
            },
            set(val) {
                if (this.editorConfig.configProperty) {
                    this.$set(this.selectItem, this.editorConfig.configProperty, val);
                }
            }
        }
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$R = script$R;
/* template */
var __vue_render__$R = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("关联数据") } },
    [
      _c(
        "a-select",
        {
          attrs: { placeholder: _vm.$t("请选择关联数据"), allowClear: "" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        _vm._l(_vm.formAllComponentList, function(item, index) {
          return _c(
            "a-select-option",
            { key: index, attrs: { value: item.model } },
            [_c("span", [_vm._v(" " + _vm._s(item.label) + " ")])]
          )
        }),
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$R = [];
__vue_render__$R._withStripped = true;

  /* style */
  var __vue_inject_styles__$R = undefined;
  /* scoped */
  var __vue_scope_id__$R = undefined;
  /* module identifier */
  var __vue_module_identifier__$R = undefined;
  /* functional template */
  var __vue_is_functional_template__$R = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$R = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$R, staticRenderFns: __vue_staticRenderFns__$R },
    __vue_inject_styles__$R,
    __vue_script__$R,
    __vue_scope_id__$R,
    __vue_is_functional_template__$R,
    __vue_module_identifier__$R,
    false,
    undefined,
    undefined,
    undefined
  );

var script$Q = {
    name: 'DocumentRuleInputModal',
    data() {
        return {
            visible: false,
            callback: null,
            title: '请输入规则',
            rules: {
                staticText: [{
                    required: true,
                    message: "请输入文本内容!"
                }],
                randomCodeLength: [{
                    required: true,
                    message: "请输入随机码长度!"
                }]
            },
            ruleForm: {},
            ruleType: ''
        };
    },
    mounted() {},
    methods: {
        openModal(ruleType, callback) {
            this.callback = callback;
            this.ruleType = ruleType;
            this.initModalConfig();
            this.visible = true;
        },
        initModalConfig() {
            if (this.ruleType === 'staticText') {
                this.title = this.$t('静态文本设置');
                this.$set(this.ruleForm, 'staticText', '');
            }
            if (this.ruleType === 'randomCodeLength') {
                this.title = this.$t('随机码设置');
                this.$set(this.ruleForm, 'randomCodeLength', 8);
            }
        },
        handleOk() {
            this.$refs.ruleForm.validate(valid => {
                if (valid) {
                    typeof this.callback === 'function' && this.callback(this.ruleForm);
                    this.handleClose();
                }
            });
        },
        handleClose() {
            Object.assign(this.$data, this.$options.data.call(this));
            this.visible = false;
        }
    }
};

/* script */ var __vue_script__$Q = script$Q;
/* template */
var __vue_render__$Q = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-modal",
    {
      attrs: {
        title: _vm.title,
        visible: _vm.visible,
        width: "360px",
        "ok-text": "确认",
        "cancel-text": "取消",
        okClose: false
      },
      on: {
        "update:visible": function($event) {
          _vm.visible = $event;
        },
        ok: _vm.handleOk,
        cancel: _vm.handleClose
      }
    },
    [
      _c(
        "a-form-model",
        {
          ref: "ruleForm",
          staticClass: "document-rule-form",
          attrs: { model: _vm.ruleForm, rules: _vm.rules }
        },
        [
          _vm.ruleType === "staticText"
            ? _c(
                "a-form-model-item",
                {
                  attrs: { label: "文本内容", required: "", prop: "staticText" }
                },
                [
                  _c("a-input", {
                    attrs: { placeholder: "请输入文本内容" },
                    model: {
                      value: _vm.ruleForm.staticText,
                      callback: function($$v) {
                        _vm.$set(_vm.ruleForm, "staticText", $$v);
                      },
                      expression: "ruleForm.staticText"
                    }
                  })
                ],
                1
              )
            : _vm._e(),
          _vm._v(" "),
          _vm.ruleType === "randomCodeLength"
            ? _c(
                "a-form-model-item",
                {
                  attrs: {
                    label: "随机码长度",
                    required: "",
                    prop: "randomCodeLength"
                  }
                },
                [
                  _c("a-input-number", {
                    attrs: { placeholder: "请输入随机码长度", max: 12, min: 6 },
                    model: {
                      value: _vm.ruleForm.randomCodeLength,
                      callback: function($$v) {
                        _vm.$set(_vm.ruleForm, "randomCodeLength", $$v);
                      },
                      expression: "ruleForm.randomCodeLength"
                    }
                  })
                ],
                1
              )
            : _vm._e()
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$Q = [];
__vue_render__$Q._withStripped = true;

  /* style */
  var __vue_inject_styles__$Q = undefined;
  /* scoped */
  var __vue_scope_id__$Q = undefined;
  /* module identifier */
  var __vue_module_identifier__$Q = undefined;
  /* functional template */
  var __vue_is_functional_template__$Q = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$Q = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$Q, staticRenderFns: __vue_staticRenderFns__$Q },
    __vue_inject_styles__$Q,
    __vue_script__$Q,
    __vue_scope_id__$Q,
    __vue_is_functional_template__$Q,
    __vue_module_identifier__$Q,
    false,
    undefined,
    undefined,
    undefined
  );

var script$P = {
    name: 'DocumentNumberRuleConfigEditor',
    components: {
        DocumentRuleInputModal: __vue_component__$Q
    },
    mixins: [editorComponentMixin],
    props: {},
    data() {
        return {
            ruleConfigOptions: [{
                label: '当前年',
                value: 'currentYear'
            }, {
                label: '当前月',
                value: 'currentMonth'
            }, {
                label: '当前日',
                value: 'currentDay'
            }, {
                label: '静态文本',
                value: 'staticText'
            }, {
                label: '随机码长度',
                value: 'randomCodeLength'
            }]
        };
    },
    computed: {
        getDocumentRuleName() {
            return rule => {
                var ruleConfig = this.ruleConfigOptions.find(item => item.value === rule.ruleType);
                if (ruleConfig) {
                    if (rule.ruleType === 'staticText') {
                        return ruleConfig.label + ':' + rule.staticText;
                    }
                    if (rule.ruleType === 'randomCodeLength') {
                        return ruleConfig.label + ':' + rule.randomCodeLength;
                    }
                    return ruleConfig.label;
                }
                return '';
            };
        }
    },
    methods: {
        handleSelectRule(menuItemDom) {
            var fixedContentKeys = ['currentYear', 'currentMonth', 'currentDay'];
            if (!this.editorValue || !Array.isArray(this.editorValue)) {
                this.editorValue = [];
            }
            if (fixedContentKeys.includes(menuItemDom.key)) {
                this.editorValue.push({
                    ruleType: menuItemDom.key
                });
            }
            var inputContentKeys = ['staticText', 'randomCodeLength'];
            if (inputContentKeys.includes(menuItemDom.key)) {
                this.$refs.documentRuleInputRef.openModal(menuItemDom.key, ruleConfig => {
                    console.log(ruleConfig);
                    this.editorValue.push({
                        ...ruleConfig,
                        ruleType: menuItemDom.key
                    });
                });
            }
        },
        deleteDocumentRule(ruleConfig, index) {
            console.log(ruleConfig);
            this.editorValue.splice(index, 1);
        }
    }
};

/* script */ var __vue_script__$P = script$P;
/* template */
var __vue_render__$P = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: "单据号规则配置" } },
    [
      _c(
        "div",
        [
          Array.isArray(_vm.editorValue)
            ? _c(
                "div",
                { staticClass: "current-rule-list" },
                _vm._l(_vm.editorValue, function(item, index) {
                  return _c(
                    "div",
                    { key: index, staticClass: "current-rule-item" },
                    [
                      _c("g-ellipsis", {
                        staticClass: "current-rule-name",
                        attrs: {
                          content: _vm.getDocumentRuleName(item),
                          maxWidth: "150px"
                        }
                      }),
                      _vm._v(" "),
                      _c("a-icon", {
                        staticClass: "rule-delete",
                        attrs: { type: "delete" },
                        on: {
                          click: function() {
                            return _vm.deleteDocumentRule(item, index)
                          }
                        }
                      })
                    ],
                    1
                  )
                }),
                0
              )
            : _vm._e(),
          _vm._v(" "),
          _c(
            "a-dropdown",
            { attrs: { trigger: ["click"] } },
            [
              _c(
                "p",
                { staticClass: "rule-menu" },
                [
                  _c("a-icon", {
                    staticStyle: {
                      border: "1px solid #b2b2b2",
                      "border-radius": "50%"
                    },
                    attrs: { type: "plus" }
                  }),
                  _vm._v(" " + _vm._s("添加规则") + "\n      ")
                ],
                1
              ),
              _vm._v(" "),
              _c(
                "a-menu",
                {
                  attrs: { slot: "overlay" },
                  on: { click: _vm.handleSelectRule },
                  slot: "overlay"
                },
                _vm._l(_vm.ruleConfigOptions, function(ruleConfig) {
                  return _c("a-menu-item", { key: ruleConfig.value }, [
                    _vm._v(
                      "\n          " + _vm._s(ruleConfig.label) + "\n        "
                    )
                  ])
                }),
                1
              )
            ],
            1
          )
        ],
        1
      ),
      _vm._v(" "),
      _c("document-rule-input-modal", { ref: "documentRuleInputRef" })
    ],
    1
  )
};
var __vue_staticRenderFns__$P = [];
__vue_render__$P._withStripped = true;

  /* style */
  var __vue_inject_styles__$P = undefined;
  /* scoped */
  var __vue_scope_id__$P = undefined;
  /* module identifier */
  var __vue_module_identifier__$P = undefined;
  /* functional template */
  var __vue_is_functional_template__$P = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$P = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$P, staticRenderFns: __vue_staticRenderFns__$P },
    __vue_inject_styles__$P,
    __vue_script__$P,
    __vue_scope_id__$P,
    __vue_is_functional_template__$P,
    __vue_module_identifier__$P,
    false,
    undefined,
    undefined,
    undefined
  );

var script$O = {
    name: "TableInfoEditor",
    props: {
        formPageConfig: {
            type: Object,
            default: () => {}
        },
        selectItem: {
            type: Object,
            required: true
        },
        formSource: {
            type: Object,
            default() {
                return {};
            }
        },
        dbFormFieldList: {
            type: Array,
            default() {
                return [];
            }
        }
    },
    data() {
        return {
            addressConfig: [{
                key: 'provinceKey',
                id: 'provinceId',
                label: this.$t('省Code')
            }, {
                key: 'provinceNameKey',
                id: 'provinceNameId',
                label: this.$t('省Name')
            }, {
                key: 'cityKey',
                id: 'cityId',
                label: this.$t('市Code')
            }, {
                key: 'cityNameKey',
                id: 'cityNameId',
                label: this.$t('市Name')
            }, {
                key: 'areaKey',
                id: 'areaId',
                label: this.$t('区Code')
            }, {
                key: 'areaNameKey',
                id: 'areaNameId',
                label: this.$t('区Name')
            }]
        };
    },
    computed: {},
    watch: {},
    created() {},
    methods: {
        filterFiledOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        selectFieldSelect(id, config) {
            if (!id) return;
            let field = this.dbFormFieldList.find(val => val.id == id);
            if (!field) return this.$message.error(this.$t('没有这个字段信息'));
            field = cloneDeep(field);
            var isExist = this.getFieldExistStatus(field);
            if (isExist) {
                this.$message.error(this.$t('字段') + field.dbFieldName + this.$t('已存在'));
                if (config.type == 'name') {
                    this.selectItem.fieldRelatedName = '';
                    this.selectItem.fieldRelateId = '';
                    this.$refs.selectField.blur();
                    return;
                }
                this.selectItem.columnId = '';
                this.selectItem.model = '';
                if (config.type === 'address') {
                    if (this.selectItem.bindDataInfo) {
                        this.selectItem.bindDataInfo[config.id] = '';
                    }
                    this.$refs[config.id + 'Ref'] && this.$refs[config.id + 'Ref'][0].blur();
                } else {
                    this.$refs.selectField.blur();
                }
                return;
            }
            let originField = this.selectItem.model;
            if (config.type === 'address') {
                this.selectItem.bindDataInfo[config.key] = field.dbFieldName;
                if (!this.selectItem.fieldValues) this.selectItem.fieldValues = {};
                let domId = '';
                if (this.selectItem.fieldValues[config.key] && this.selectItem.fieldValues[config.key].id) {
                    domId = this.selectItem.fieldValues[config.key].id;
                }
                this.selectItem.fieldValues[config.key] = {
                    ...field,
                    columnId: id,
                    label: this.selectItem.label,
                    id: domId
                };
            } else if (config.type === 'name') {
                if (!this.selectItem.columnId) {
                    this.$message.error(this.$t('请先选择主表字段Code'));
                    this.selectItem.fieldRelatedName = '';
                    this.selectItem.fieldRelateId = '';
                    return;
                }
                this.selectItem.fieldRelatedName = field.dbFieldNameUp;
                this.selectItem.fieldRelateId = id;
            } else {
                this.selectItem.model = field.dbFieldName;
                if (this.selectItem.field && this.selectItem.field.id) {
                    domId = this.selectItem.field.id;
                }
                this.selectItem.label = field.dbFieldTxt;
                this.selectItem.field = field;
                this.selectItem.field.columnId = id;
                this.selectItem.field.label = this.selectItem.label;
            }
            this.formSource.formDataControl.addAlreadyBindFieldList(field, originField);
        },
        getFieldExistStatus(field) {
            var allFlattenComponentList = this.formSource.formDataControl.getAllFlattenComponentList();
            var allSelectedFieldColumIdList = [];
            allFlattenComponentList.forEach(item => {
                item.columnId && allSelectedFieldColumIdList.push(item.columnId);
                if (item.code === 'FORM_SELECT_INPUT') {
                    item.fieldRelateId && allSelectedFieldColumIdList.push(item.fieldRelateId);
                }
                if (item.code === 'FORM_AREA_SELECT') {
                    this.addressConfig.forEach(address => {
                        item.bindDataInfo[address.id] && allSelectedFieldColumIdList.push(item.bindDataInfo[address.id]);
                    });
                }
            });
            var existList = allSelectedFieldColumIdList.filter(fieldColumId => fieldColumId === field.id);
            return existList.length > 1;
        }
    }
};

/* script */ var __vue_script__$O = script$O;

/* template */
var __vue_render__$O = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-card",
    { attrs: { size: "small", title: _vm.$t("表信息") } },
    [
      _c("a-form-model-item", { attrs: { label: _vm.$t("表名") } }, [
        _vm._v("\n    " + _vm._s(_vm.formPageConfig.tableName) + "\n  ")
      ]),
      _vm._v(" "),
      _vm.selectItem.code !== "FORM_AREA_SELECT"
        ? _c(
            "a-form-model-item",
            { attrs: { label: _vm.$t("关联字段") } },
            [
              _c(
                "a-select",
                {
                  ref: "selectField",
                  attrs: {
                    placeholder: _vm.$t("请选择关联字段"),
                    "show-search": "",
                    dropdownMatchSelectWidth: false,
                    "filter-option": _vm.filterFiledOption
                  },
                  on: {
                    change: function(value) {
                      return _vm.selectFieldSelect(value, { type: "code" })
                    }
                  },
                  model: {
                    value: _vm.selectItem.columnId,
                    callback: function($$v) {
                      _vm.$set(_vm.selectItem, "columnId", $$v);
                    },
                    expression: "selectItem.columnId"
                  }
                },
                _vm._l(_vm.dbFormFieldList, function(item, key) {
                  return _c(
                    "a-select-option",
                    { key: key, attrs: { value: item.id } },
                    [
                      _vm._v(
                        "\n        " +
                          _vm._s(
                            item.dbFieldName + "  (" + item.dbFieldTxt + ")"
                          ) +
                          "\n      "
                      )
                    ]
                  )
                }),
                1
              )
            ],
            1
          )
        : _vm._e(),
      _vm._v(" "),
      _vm.selectItem.type === "select"
        ? _c(
            "a-form-model-item",
            { attrs: { label: _vm.$t("主表字段名称") } },
            [
              _c(
                "a-select",
                {
                  ref: "selectFieldName",
                  attrs: {
                    "show-search": "",
                    dropdownMatchSelectWidth: false,
                    "filter-option": _vm.filterFiledOption
                  },
                  on: {
                    change: function(value) {
                      return _vm.selectFieldSelect(value, { type: "name" })
                    }
                  },
                  model: {
                    value: _vm.selectItem.fieldRelateId,
                    callback: function($$v) {
                      _vm.$set(_vm.selectItem, "fieldRelateId", $$v);
                    },
                    expression: "selectItem.fieldRelateId"
                  }
                },
                _vm._l(_vm.dbFormFieldList, function(item, key) {
                  return _c(
                    "a-select-option",
                    { key: key, attrs: { value: item.id } },
                    [
                      _vm._v(
                        "\n        " +
                          _vm._s(
                            item.dbFieldName + "  (" + item.dbFieldTxt + ")"
                          ) +
                          "\n      "
                      )
                    ]
                  )
                }),
                1
              )
            ],
            1
          )
        : _vm._e(),
      _vm._v(" "),
      _vm.selectItem.code === "FORM_AREA_SELECT"
        ? _c(
            "div",
            _vm._l(_vm.addressConfig, function(address) {
              return _c(
                "a-form-model-item",
                { key: address.key, attrs: { label: address.label } },
                [
                  _vm.formPageConfig.tableId
                    ? _c(
                        "a-select",
                        {
                          ref: address.id + "Ref",
                          refInFor: true,
                          attrs: {
                            "show-search": "",
                            dropdownMatchSelectWidth: false,
                            "filter-option": _vm.filterFiledOption,
                            placeholder:
                              "" +
                              _vm.$t("请选择") +
                              address.label +
                              _vm.$t("字段")
                          },
                          on: {
                            change: function(value) {
                              address.type = "address";
                              _vm.selectFieldSelect(value, address);
                            }
                          },
                          model: {
                            value: _vm.selectItem.bindDataInfo[address.id],
                            callback: function($$v) {
                              _vm.$set(
                                _vm.selectItem.bindDataInfo,
                                address.id,
                                $$v
                              );
                            },
                            expression: "selectItem.bindDataInfo[address.id]"
                          }
                        },
                        _vm._l(_vm.dbFormFieldList, function(item, key) {
                          return _c(
                            "a-select-option",
                            { key: key, attrs: { value: item.id } },
                            [
                              _vm._v(
                                "\n          " +
                                  _vm._s(
                                    item.dbFieldName +
                                      "  (" +
                                      item.dbFieldTxt +
                                      ")"
                                  ) +
                                  "\n        "
                              )
                            ]
                          )
                        }),
                        1
                      )
                    : _vm._e()
                ],
                1
              )
            }),
            1
          )
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$O = [];
__vue_render__$O._withStripped = true;

  /* style */
  var __vue_inject_styles__$O = undefined;
  /* scoped */
  var __vue_scope_id__$O = undefined;
  /* module identifier */
  var __vue_module_identifier__$O = undefined;
  /* functional template */
  var __vue_is_functional_template__$O = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$O = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$O, staticRenderFns: __vue_staticRenderFns__$O },
    __vue_inject_styles__$O,
    __vue_script__$O,
    __vue_scope_id__$O,
    __vue_is_functional_template__$O,
    __vue_module_identifier__$O,
    false,
    undefined,
    undefined,
    undefined
  );

var script$N = {
    name: 'FormLabelInputEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    computed: {},
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$N = script$N;
/* template */
var __vue_render__$N = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    {
      attrs: {
        label: _vm.selectItem.code === "FORM_STATIC_TEXT" ? "文本内容" : "标签"
      }
    },
    [
      _c("a-input", {
        attrs: { placeholder: "请输入" },
        on: { change: _vm.changeLabel },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$N = [];
__vue_render__$N._withStripped = true;

  /* style */
  var __vue_inject_styles__$N = undefined;
  /* scoped */
  var __vue_scope_id__$N = "data-v-3d644f5a";
  /* module identifier */
  var __vue_module_identifier__$N = undefined;
  /* functional template */
  var __vue_is_functional_template__$N = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$N = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$N, staticRenderFns: __vue_staticRenderFns__$N },
    __vue_inject_styles__$N,
    __vue_script__$N,
    __vue_scope_id__$N,
    __vue_is_functional_template__$N,
    __vue_module_identifier__$N,
    false,
    undefined,
    undefined,
    undefined
  );

var script$M = {
    name: 'FormInputTypeEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$M = script$M;
/* template */
var __vue_render__$M = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("请选择type") } },
    [
      _c(
        "a-select",
        {
          attrs: { placeholder: _vm.$t("请选择type") },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-select-option", { attrs: { value: "text" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("文本框")) + "\n    ")
          ]),
          _vm._v(" "),
          _c("a-select-option", { attrs: { value: "password" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("密码")) + "\n    ")
          ])
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$M = [];
__vue_render__$M._withStripped = true;

  /* style */
  var __vue_inject_styles__$M = undefined;
  /* scoped */
  var __vue_scope_id__$M = "data-v-1a3067f5";
  /* module identifier */
  var __vue_module_identifier__$M = undefined;
  /* functional template */
  var __vue_is_functional_template__$M = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$M = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$M, staticRenderFns: __vue_staticRenderFns__$M },
    __vue_inject_styles__$M,
    __vue_script__$M,
    __vue_scope_id__$M,
    __vue_is_functional_template__$M,
    __vue_module_identifier__$M,
    false,
    undefined,
    undefined,
    undefined
  );

var script$L = {
    name: 'FormDateFormatEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$L = script$L;
/* template */
var __vue_render__$L = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("时间格式") } },
    [
      _c(
        "a-select",
        {
          attrs: { placeholder: _vm.$t("请选择type") },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-select-option", { attrs: { value: "YYYY-MM-DD HH:mm:ss" } }, [
            _vm._v(
              "\n      " +
                _vm._s(_vm.$t("日期(YYYY-MM-dd HH:mm:ss)")) +
                "\n    "
            )
          ])
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$L = [];
__vue_render__$L._withStripped = true;

  /* style */
  var __vue_inject_styles__$L = undefined;
  /* scoped */
  var __vue_scope_id__$L = "data-v-15014590";
  /* module identifier */
  var __vue_module_identifier__$L = undefined;
  /* functional template */
  var __vue_is_functional_template__$L = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$L = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$L, staticRenderFns: __vue_staticRenderFns__$L },
    __vue_inject_styles__$L,
    __vue_script__$L,
    __vue_scope_id__$L,
    __vue_is_functional_template__$L,
    __vue_module_identifier__$L,
    false,
    undefined,
    undefined,
    undefined
  );

var script$K = {
    name: 'FormPlaceholderEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$K = script$K;
/* template */
var __vue_render__$K = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return typeof _vm.options.rangePlaceholder !== "undefined" &&
    _vm.options.range
    ? _c(
        "a-form-item",
        { attrs: { label: _vm.$t("占位内容") } },
        [
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入") },
            model: {
              value: _vm.options.rangePlaceholder[0],
              callback: function($$v) {
                _vm.$set(_vm.options.rangePlaceholder, 0, $$v);
              },
              expression: "options.rangePlaceholder[0]"
            }
          }),
          _vm._v(" "),
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入") },
            model: {
              value: _vm.options.rangePlaceholder[1],
              callback: function($$v) {
                _vm.$set(_vm.options.rangePlaceholder, 1, $$v);
              },
              expression: "options.rangePlaceholder[1]"
            }
          })
        ],
        1
      )
    : _c(
        "a-form-item",
        { attrs: { label: _vm.$t("占位内容") } },
        [
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入") },
            model: {
              value: _vm.editorValue,
              callback: function($$v) {
                _vm.editorValue = $$v;
              },
              expression: "editorValue"
            }
          })
        ],
        1
      )
};
var __vue_staticRenderFns__$K = [];
__vue_render__$K._withStripped = true;

  /* style */
  var __vue_inject_styles__$K = undefined;
  /* scoped */
  var __vue_scope_id__$K = "data-v-34baf555";
  /* module identifier */
  var __vue_module_identifier__$K = undefined;
  /* functional template */
  var __vue_is_functional_template__$K = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$K = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$K, staticRenderFns: __vue_staticRenderFns__$K },
    __vue_inject_styles__$K,
    __vue_script__$K,
    __vue_scope_id__$K,
    __vue_is_functional_template__$K,
    __vue_module_identifier__$K,
    false,
    undefined,
    undefined,
    undefined
  );

var script$J = {
    name: 'FormCustomLabelEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$J = script$J;

/* template */
var __vue_render__$J = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      _vm.formPageConfig.layout === "horizontal" &&
      typeof _vm.options.isCustomLabelCol !== "undefined"
        ? _c(
            "a-form-item",
            [
              _c(
                "a-checkbox",
                {
                  model: {
                    value: _vm.options.isCustomLabelCol,
                    callback: function($$v) {
                      _vm.$set(_vm.options, "isCustomLabelCol", $$v);
                    },
                    expression: "options.isCustomLabelCol"
                  }
                },
                [
                  _vm._v(
                    "\n      " + _vm._s(_vm.$t("自定义labelCol")) + "\n    "
                  )
                ]
              )
            ],
            1
          )
        : _vm._e(),
      _vm._v(" "),
      typeof _vm.options.labelCol !== "undefined" &&
      _vm.options.isCustomLabelCol &&
      _vm.formPageConfig.layout === "horizontal"
        ? _c(
            "a-form-item",
            { attrs: { label: _vm.$t("labelCol（水平布局生效）") } },
            [
              _c(
                "div",
                { staticClass: "change-col-box" },
                [
                  _c("a-slider", {
                    attrs: { max: 24, min: 0, step: 0.1 },
                    model: {
                      value: _vm.options.labelCol.span,
                      callback: function($$v) {
                        _vm.$set(_vm.options.labelCol, "span", $$v);
                      },
                      expression: "options.labelCol.span"
                    }
                  })
                ],
                1
              )
            ]
          )
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$J = [];
__vue_render__$J._withStripped = true;

  /* style */
  var __vue_inject_styles__$J = undefined;
  /* scoped */
  var __vue_scope_id__$J = undefined;
  /* module identifier */
  var __vue_module_identifier__$J = undefined;
  /* functional template */
  var __vue_is_functional_template__$J = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$J = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$J, staticRenderFns: __vue_staticRenderFns__$J },
    __vue_inject_styles__$J,
    __vue_script__$J,
    __vue_scope_id__$J,
    __vue_is_functional_template__$J,
    __vue_module_identifier__$J,
    false,
    undefined,
    undefined,
    undefined
  );

var script$I = {
    name: 'FormTextareaHeightEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$I = script$I;
/* template */
var __vue_render__$I = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("内容高度") } },
    [
      _c("a-input-number", {
        staticStyle: { width: "100%" },
        attrs: { placeholder: _vm.$t("最小高度") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      }),
      _vm._v(" "),
      _c("a-input-number", {
        staticStyle: { width: "100%" },
        attrs: {
          value: _vm.selectItem.maxRows,
          placeholder: _vm.$t("最大高度")
        },
        on: {
          change: function($event) {
            return _vm.updateSelectConfigByField("maxRows", $event)
          }
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$I = [];
__vue_render__$I._withStripped = true;

  /* style */
  var __vue_inject_styles__$I = undefined;
  /* scoped */
  var __vue_scope_id__$I = "data-v-64f6852b";
  /* module identifier */
  var __vue_module_identifier__$I = undefined;
  /* functional template */
  var __vue_is_functional_template__$I = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$I = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$I, staticRenderFns: __vue_staticRenderFns__$I },
    __vue_inject_styles__$I,
    __vue_script__$I,
    __vue_scope_id__$I,
    __vue_is_functional_template__$I,
    __vue_module_identifier__$I,
    false,
    undefined,
    undefined,
    undefined
  );

var script$H = {
    name: 'FormComponentWidthEditor',
    mixins: [editorComponentMixin],
    data() {
        return {
            widthOptions: [{
                value: '25%',
                label: '1/4'
            }, {
                value: '33.33%',
                label: '1/3'
            }, {
                value: '50%',
                label: '1/2'
            }, {
                value: '75%',
                label: '3/4'
            }, {
                value: '100%',
                label: '1'
            }]
        };
    },
    methods: {
        handleSizeChange(event) {
            this.editorValue = event.target.value;
        }
    }
};

/* script */ var __vue_script__$H = script$H;
/* template */
var __vue_render__$H = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _vm.selectItem.parentCode !== "FORM_GRID"
    ? _c(
        "a-form-item",
        { attrs: { label: _vm.$t("宽度") } },
        [
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入") },
            model: {
              value: _vm.editorValue,
              callback: function($$v) {
                _vm.editorValue = $$v;
              },
              expression: "editorValue"
            }
          }),
          _vm._v(" "),
          _c(
            "a-radio-group",
            {
              attrs: { value: _vm.editorValue, size: "small" },
              on: { change: _vm.handleSizeChange }
            },
            _vm._l(_vm.widthOptions, function(item) {
              return _c(
                "a-radio-button",
                { key: item.value, attrs: { value: item.value } },
                [_vm._v("\n      " + _vm._s(item.label) + "\n    ")]
              )
            }),
            1
          )
        ],
        1
      )
    : _vm._e()
};
var __vue_staticRenderFns__$H = [];
__vue_render__$H._withStripped = true;

  /* style */
  var __vue_inject_styles__$H = undefined;
  /* scoped */
  var __vue_scope_id__$H = "data-v-973addde";
  /* module identifier */
  var __vue_module_identifier__$H = undefined;
  /* functional template */
  var __vue_is_functional_template__$H = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$H = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$H, staticRenderFns: __vue_staticRenderFns__$H },
    __vue_inject_styles__$H,
    __vue_script__$H,
    __vue_scope_id__$H,
    __vue_is_functional_template__$H,
    __vue_module_identifier__$H,
    false,
    undefined,
    undefined,
    undefined
  );

var script$G = {
    name: 'FormComponentHeightEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$G = script$G;
/* template */
var __vue_render__$G = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return typeof _vm.options.height !== "undefined"
    ? _c(
        "a-form-item",
        { attrs: { label: _vm.$t("高度") } },
        [
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入") },
            model: {
              value: _vm.editorValue,
              callback: function($$v) {
                _vm.editorValue = $$v;
              },
              expression: "editorValue"
            }
          })
        ],
        1
      )
    : _vm._e()
};
var __vue_staticRenderFns__$G = [];
__vue_render__$G._withStripped = true;

  /* style */
  var __vue_inject_styles__$G = undefined;
  /* scoped */
  var __vue_scope_id__$G = "data-v-1af7dc54";
  /* module identifier */
  var __vue_module_identifier__$G = undefined;
  /* functional template */
  var __vue_is_functional_template__$G = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$G = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$G, staticRenderFns: __vue_staticRenderFns__$G },
    __vue_inject_styles__$G,
    __vue_script__$G,
    __vue_scope_id__$G,
    __vue_is_functional_template__$G,
    __vue_module_identifier__$G,
    false,
    undefined,
    undefined,
    undefined
  );

var script$F = {
    name: 'FormStepSizeEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$F = script$F;
/* template */
var __vue_render__$F = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("步长") } },
    [
      _c("a-input-number", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$F = [];
__vue_render__$F._withStripped = true;

  /* style */
  var __vue_inject_styles__$F = undefined;
  /* scoped */
  var __vue_scope_id__$F = "data-v-3dd51ff6";
  /* module identifier */
  var __vue_module_identifier__$F = undefined;
  /* functional template */
  var __vue_is_functional_template__$F = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$F = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$F, staticRenderFns: __vue_staticRenderFns__$F },
    __vue_inject_styles__$F,
    __vue_script__$F,
    __vue_scope_id__$F,
    __vue_is_functional_template__$F,
    __vue_module_identifier__$F,
    false,
    undefined,
    undefined,
    undefined
  );

var script$E = {
    name: 'FormNumberMinEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$E = script$E;
/* template */
var __vue_render__$E = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("最小值") } },
    [
      _c("a-input-number", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$E = [];
__vue_render__$E._withStripped = true;

  /* style */
  var __vue_inject_styles__$E = undefined;
  /* scoped */
  var __vue_scope_id__$E = "data-v-58e97036";
  /* module identifier */
  var __vue_module_identifier__$E = undefined;
  /* functional template */
  var __vue_is_functional_template__$E = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$E = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$E, staticRenderFns: __vue_staticRenderFns__$E },
    __vue_inject_styles__$E,
    __vue_script__$E,
    __vue_scope_id__$E,
    __vue_is_functional_template__$E,
    __vue_module_identifier__$E,
    false,
    undefined,
    undefined,
    undefined
  );

var script$D = {
    name: 'FormNumberMaxEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$D = script$D;
/* template */
var __vue_render__$D = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("最大值") } },
    [
      _c("a-input-number", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$D = [];
__vue_render__$D._withStripped = true;

  /* style */
  var __vue_inject_styles__$D = undefined;
  /* scoped */
  var __vue_scope_id__$D = "data-v-f480181c";
  /* module identifier */
  var __vue_module_identifier__$D = undefined;
  /* functional template */
  var __vue_is_functional_template__$D = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$D = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$D, staticRenderFns: __vue_staticRenderFns__$D },
    __vue_inject_styles__$D,
    __vue_script__$D,
    __vue_scope_id__$D,
    __vue_is_functional_template__$D,
    __vue_module_identifier__$D,
    false,
    undefined,
    undefined,
    undefined
  );

var script$C = {
    name: 'FormNumberPrecisionEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$C = script$C;
/* template */
var __vue_render__$C = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("数值精度") } },
    [
      _c("a-input-number", {
        attrs: { min: 0, max: 50, placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$C = [];
__vue_render__$C._withStripped = true;

  /* style */
  var __vue_inject_styles__$C = undefined;
  /* scoped */
  var __vue_scope_id__$C = "data-v-517d0581";
  /* module identifier */
  var __vue_module_identifier__$C = undefined;
  /* functional template */
  var __vue_is_functional_template__$C = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$C = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$C, staticRenderFns: __vue_staticRenderFns__$C },
    __vue_inject_styles__$C,
    __vue_script__$C,
    __vue_scope_id__$C,
    __vue_is_functional_template__$C,
    __vue_module_identifier__$C,
    false,
    undefined,
    undefined,
    undefined
  );

var script$B = {
    name: 'FormGridColumnEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeGridColNum(e) {
            let colNum = e.target.value;
            this.selectItem.colNum = colNum;
            if (this.selectItem.columns) {
                this.selectItem.columns = this.selectItem.columns.splice(0, colNum);
                let columnLength = this.selectItem.columns.length;
                for (columnLength; columnLength < colNum; columnLength++) {
                    this.selectItem.columns.push({
                        span: 12,
                        list: []
                    });
                }
                this.selectItem.columns = this.selectItem.columns.map(item => ({
                    span: 24 / colNum,
                    list: item.list
                }));
            }
        }
    }
};

/* script */ var __vue_script__$B = script$B;
/* template */
var __vue_render__$B = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("列配置项") } },
    [
      _c(
        "a-radio-group",
        {
          on: { change: _vm.changeGridColNum },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c(
            "a-radio",
            {
              style: { display: "block", height: "30px", lineHeight: "30px" },
              attrs: { value: 1 }
            },
            [_vm._v("\n      " + _vm._s(_vm.$t("一行一列")) + "\n    ")]
          ),
          _vm._v(" "),
          _c(
            "a-radio",
            {
              style: { display: "block", height: "30px", lineHeight: "30px" },
              attrs: { value: 2 }
            },
            [_vm._v("\n      " + _vm._s(_vm.$t("一行两列")) + "\n    ")]
          ),
          _vm._v(" "),
          _c(
            "a-radio",
            {
              style: { display: "block", height: "30px", lineHeight: "30px" },
              attrs: { value: 3 }
            },
            [_vm._v("\n      " + _vm._s(_vm.$t("一行三列")) + " \n    ")]
          ),
          _vm._v(" "),
          _c(
            "a-radio",
            {
              style: { display: "block", height: "30px", lineHeight: "30px" },
              attrs: { value: 4 }
            },
            [_vm._v("\n      " + _vm._s(_vm.$t("一行四列")) + "\n    ")]
          )
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$B = [];
__vue_render__$B._withStripped = true;

  /* style */
  var __vue_inject_styles__$B = undefined;
  /* scoped */
  var __vue_scope_id__$B = "data-v-3cc3f3bb";
  /* module identifier */
  var __vue_module_identifier__$B = undefined;
  /* functional template */
  var __vue_is_functional_template__$B = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$B = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$B, staticRenderFns: __vue_staticRenderFns__$B },
    __vue_inject_styles__$B,
    __vue_script__$B,
    __vue_scope_id__$B,
    __vue_is_functional_template__$B,
    __vue_module_identifier__$B,
    false,
    undefined,
    undefined,
    undefined
  );

var script$A = {
    name: 'FormGridGutterEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$A = script$A;

/* template */
var __vue_render__$A = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("栅格间距") } },
    [
      _c("a-input-number", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$A = [];
__vue_render__$A._withStripped = true;

  /* style */
  var __vue_inject_styles__$A = undefined;
  /* scoped */
  var __vue_scope_id__$A = undefined;
  /* module identifier */
  var __vue_module_identifier__$A = undefined;
  /* functional template */
  var __vue_is_functional_template__$A = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$A = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$A, staticRenderFns: __vue_staticRenderFns__$A },
    __vue_inject_styles__$A,
    __vue_script__$A,
    __vue_scope_id__$A,
    __vue_is_functional_template__$A,
    __vue_module_identifier__$A,
    false,
    undefined,
    undefined,
    undefined
  );

var script$z = {
    name: 'FormPromptMessageEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$z = script$z;
/* template */
var __vue_render__$z = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("提示信息") } },
    [
      _c("a-input", {
        attrs: { placeholder: _vm.$t("请输入提示内容") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$z = [];
__vue_render__$z._withStripped = true;

  /* style */
  var __vue_inject_styles__$z = undefined;
  /* scoped */
  var __vue_scope_id__$z = "data-v-43f33d6a";
  /* module identifier */
  var __vue_module_identifier__$z = undefined;
  /* functional template */
  var __vue_is_functional_template__$z = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$z = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$z, staticRenderFns: __vue_staticRenderFns__$z },
    __vue_inject_styles__$z,
    __vue_script__$z,
    __vue_scope_id__$z,
    __vue_is_functional_template__$z,
    __vue_module_identifier__$z,
    false,
    undefined,
    undefined,
    undefined
  );

var script$y = {
    name: 'FormOrientationEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$y = script$y;
/* template */
var __vue_render__$y = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("标签位置") } },
    [
      _c(
        "a-radio-group",
        {
          attrs: { buttonStyle: "solid" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-radio-button", { attrs: { value: "left" } }, [
            _vm._v(_vm._s(_vm.$t("左")))
          ]),
          _vm._v(" "),
          _c("a-radio-button", { attrs: { value: "center" } }, [
            _vm._v(_vm._s(_vm.$t("居中")))
          ]),
          _vm._v(" "),
          _c("a-radio-button", { attrs: { value: "right" } }, [
            _vm._v(_vm._s(_vm.$t("右")))
          ])
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$y = [];
__vue_render__$y._withStripped = true;

  /* style */
  var __vue_inject_styles__$y = undefined;
  /* scoped */
  var __vue_scope_id__$y = "data-v-ee9f4098";
  /* module identifier */
  var __vue_module_identifier__$y = undefined;
  /* functional template */
  var __vue_is_functional_template__$y = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$y = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$y, staticRenderFns: __vue_staticRenderFns__$y },
    __vue_inject_styles__$y,
    __vue_script__$y,
    __vue_scope_id__$y,
    __vue_is_functional_template__$y,
    __vue_module_identifier__$y,
    false,
    undefined,
    undefined,
    undefined
  );

var script$x = {
    name: 'FormBtnTypeEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$x = script$x;
/* template */
var __vue_render__$x = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("类型") } },
    [
      _c(
        "a-radio-group",
        {
          attrs: { buttonStyle: "solid" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-radio", { attrs: { value: "primary" } }, [_vm._v("Primary")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "default" } }, [_vm._v("Default")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "dashed" } }, [_vm._v("Dashed")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "danger" } }, [_vm._v("Danger")])
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$x = [];
__vue_render__$x._withStripped = true;

  /* style */
  var __vue_inject_styles__$x = undefined;
  /* scoped */
  var __vue_scope_id__$x = "data-v-729cc6ea";
  /* module identifier */
  var __vue_module_identifier__$x = undefined;
  /* functional template */
  var __vue_is_functional_template__$x = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$x = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$x, staticRenderFns: __vue_staticRenderFns__$x },
    __vue_inject_styles__$x,
    __vue_script__$x,
    __vue_scope_id__$x,
    __vue_is_functional_template__$x,
    __vue_module_identifier__$x,
    false,
    undefined,
    undefined,
    undefined
  );

var script$w = {
    name: 'FormTextAlignEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        changeLabel() {
            if (this.selectItem.field) {
                this.selectItem.field.label = this.selectItem.label;
            }
        }
    }
};

/* script */ var __vue_script__$w = script$w;
/* template */
var __vue_render__$w = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _vm.selectItem.type === "text"
    ? _c(
        "a-form-item",
        { attrs: { label: _vm.$t("文字对齐方式") } },
        [
          _c(
            "a-radio-group",
            {
              attrs: { buttonStyle: "solid" },
              model: {
                value: _vm.editorValue,
                callback: function($$v) {
                  _vm.editorValue = $$v;
                },
                expression: "editorValue"
              }
            },
            [
              _c("a-radio-button", { attrs: { value: "left" } }, [
                _vm._v(_vm._s(_vm.$t("左")))
              ]),
              _vm._v(" "),
              _c("a-radio-button", { attrs: { value: "center" } }, [
                _vm._v(_vm._s(_vm.$t("居中")))
              ]),
              _vm._v(" "),
              _c("a-radio-button", { attrs: { value: "right" } }, [
                _vm._v(_vm._s(_vm.$t("右")))
              ])
            ],
            1
          )
        ],
        1
      )
    : _vm._e()
};
var __vue_staticRenderFns__$w = [];
__vue_render__$w._withStripped = true;

  /* style */
  var __vue_inject_styles__$w = undefined;
  /* scoped */
  var __vue_scope_id__$w = "data-v-79bd438c";
  /* module identifier */
  var __vue_module_identifier__$w = undefined;
  /* functional template */
  var __vue_is_functional_template__$w = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$w = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$w, staticRenderFns: __vue_staticRenderFns__$w },
    __vue_inject_styles__$w,
    __vue_script__$w,
    __vue_scope_id__$w,
    __vue_is_functional_template__$w,
    __vue_module_identifier__$w,
    false,
    undefined,
    undefined,
    undefined
  );

var script$v = {
    name: 'kCheckbox',
    data() {
        return {
            chackboxVal: false
        };
    },
    props: {
        value: {
            type: Boolean,
            default: false
        },
        label: {
            type: String,
            default: ''
        }
    },
    computed: {
        _val() {
            this.handleSetChackboxVal(this.value);
            return this.value;
        }
    },
    methods: {
        handleChange(e) {
            this.$emit('input', e.target.checked);
        },
        handleSetChackboxVal(val) {
            this.chackboxVal = val;
        }
    }
};

/* script */ var __vue_script__$v = script$v;

/* template */
var __vue_render__$v = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-checkbox",
    {
      attrs: { val: _vm._val, checked: _vm.chackboxVal },
      on: { change: _vm.handleChange }
    },
    [_vm._v("\n  " + _vm._s(_vm.label) + "\n")]
  )
};
var __vue_staticRenderFns__$v = [];
__vue_render__$v._withStripped = true;

  /* style */
  var __vue_inject_styles__$v = undefined;
  /* scoped */
  var __vue_scope_id__$v = undefined;
  /* module identifier */
  var __vue_module_identifier__$v = undefined;
  /* functional template */
  var __vue_is_functional_template__$v = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$v = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$v, staticRenderFns: __vue_staticRenderFns__$v },
    __vue_inject_styles__$v,
    __vue_script__$v,
    __vue_scope_id__$v,
    __vue_is_functional_template__$v,
    __vue_module_identifier__$v,
    false,
    undefined,
    undefined,
    undefined
  );

var script$u = {
    name: "KChangeOption",
    props: {
        value: {
            type: Array,
            required: true
        },
        type: {
            type: String,
            default: "option"
        }
    },
    methods: {
        handleAdd() {
            let addData = [...this.value, {
                value: "",
                label: ""
            }];
            this.$emit("input", addData);
        },
        handleAddCol() {
            let addData = [...this.value, {
                span: 12,
                list: []
            }];
            this.$emit("input", addData);
        },
        handleAddRules() {
            let addData = [...this.value, {
                pattern: "",
                message: ""
            }];
            this.$emit("input", addData);
        },
        handleDelete(deleteIndex) {
            this.$emit("input", this.value.filter((val, index) => index !== deleteIndex));
        }
    }
};

/* script */ var __vue_script__$u = script$u;
/* template */
var __vue_render__$u = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "option-change-container" },
    [
      _vm.type === "option"
        ? _c(
            "a-row",
            { attrs: { gutter: 8 } },
            [
              _vm._l(_vm.value, function(val, index) {
                return _c(
                  "div",
                  { key: index, staticClass: "option-change-box" },
                  [
                    _c(
                      "a-col",
                      { attrs: { span: 9 } },
                      [
                        _c("a-input", {
                          attrs: { placeholder: "名称" },
                          model: {
                            value: val.label,
                            callback: function($$v) {
                              _vm.$set(val, "label", $$v);
                            },
                            expression: "val.label"
                          }
                        })
                      ],
                      1
                    ),
                    _vm._v(" "),
                    _c(
                      "a-col",
                      { attrs: { span: 9 } },
                      [
                        _c("a-input", {
                          attrs: { placeholder: "值" },
                          model: {
                            value: val.value,
                            callback: function($$v) {
                              _vm.$set(val, "value", $$v);
                            },
                            expression: "val.value"
                          }
                        })
                      ],
                      1
                    ),
                    _vm._v(" "),
                    _c("a-col", { attrs: { span: 6 } }, [
                      _c(
                        "div",
                        {
                          staticClass: "option-delete-box",
                          on: {
                            click: function($event) {
                              return _vm.handleDelete(index)
                            }
                          }
                        },
                        [_c("a-icon", { attrs: { type: "delete" } })],
                        1
                      )
                    ])
                  ],
                  1
                )
              }),
              _vm._v(" "),
              _c("a-col", { attrs: { span: 24 } }, [
                _c("a", { on: { click: _vm.handleAdd } }, [
                  _vm._v(_vm._s("添加"))
                ])
              ])
            ],
            2
          )
        : _vm._e(),
      _vm._v(" "),
      _vm.type === "rules"
        ? _c(
            "a-row",
            { attrs: { gutter: 8 } },
            [
              _vm._l(_vm.value, function(val, index) {
                return _c("span", { key: index }, [
                  index !== 0
                    ? _c(
                        "div",
                        { staticClass: "option-change-box" },
                        [
                          _c(
                            "a-col",
                            { attrs: { span: 18 } },
                            [
                              _c("a-input", {
                                attrs: { placeholder: "提示信息" },
                                model: {
                                  value: val.message,
                                  callback: function($$v) {
                                    _vm.$set(val, "message", $$v);
                                  },
                                  expression: "val.message"
                                }
                              })
                            ],
                            1
                          ),
                          _vm._v(" "),
                          _c(
                            "a-col",
                            { attrs: { span: 18 } },
                            [
                              _c("a-input", {
                                attrs: { placeholder: "正则表达式pattern" },
                                model: {
                                  value: val.pattern,
                                  callback: function($$v) {
                                    _vm.$set(val, "pattern", $$v);
                                  },
                                  expression: "val.pattern"
                                }
                              })
                            ],
                            1
                          ),
                          _vm._v(" "),
                          _c("a-col", { attrs: { span: 6 } }, [
                            _c(
                              "div",
                              {
                                staticClass: "option-delete-box",
                                on: {
                                  click: function($event) {
                                    return _vm.handleDelete(index)
                                  }
                                }
                              },
                              [_c("a-icon", { attrs: { type: "delete" } })],
                              1
                            )
                          ])
                        ],
                        1
                      )
                    : _vm._e()
                ])
              }),
              _vm._v(" "),
              _c("a-col", { attrs: { span: 24 } }, [
                _c("a", { on: { click: _vm.handleAddRules } }, [
                  _vm._v(_vm._s("增加校验"))
                ])
              ])
            ],
            2
          )
        : _vm.type === "colspan"
        ? _c(
            "a-row",
            { attrs: { gutter: 8 } },
            [
              _vm._l(_vm.value, function(val, index) {
                return _c(
                  "div",
                  { key: index, staticClass: "option-change-box" },
                  [
                    _c(
                      "a-col",
                      { attrs: { span: 18 } },
                      [
                        _c("a-input-number", {
                          staticStyle: { width: "100%" },
                          attrs: { max: 24, placeholder: "名称" },
                          model: {
                            value: val.span,
                            callback: function($$v) {
                              _vm.$set(val, "span", $$v);
                            },
                            expression: "val.span"
                          }
                        })
                      ],
                      1
                    ),
                    _vm._v(" "),
                    _c("a-col", { attrs: { span: 6 } }, [
                      _c(
                        "div",
                        {
                          staticClass: "option-delete-box",
                          on: {
                            click: function($event) {
                              return _vm.handleDelete(index)
                            }
                          }
                        },
                        [_c("a-icon", { attrs: { type: "delete" } })],
                        1
                      )
                    ])
                  ],
                  1
                )
              }),
              _vm._v(" "),
              _c("a-col", { attrs: { span: 24 } }, [
                _c("a", { on: { click: _vm.handleAddCol } }, [
                  _vm._v(_vm._s("添加"))
                ])
              ])
            ],
            2
          )
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$u = [];
__vue_render__$u._withStripped = true;

  /* style */
  var __vue_inject_styles__$u = undefined;
  /* scoped */
  var __vue_scope_id__$u = undefined;
  /* module identifier */
  var __vue_module_identifier__$u = undefined;
  /* functional template */
  var __vue_is_functional_template__$u = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$u = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$u, staticRenderFns: __vue_staticRenderFns__$u },
    __vue_inject_styles__$u,
    __vue_script__$u,
    __vue_scope_id__$u,
    __vue_is_functional_template__$u,
    __vue_module_identifier__$u,
    false,
    undefined,
    undefined,
    undefined
  );

var script$t = {
    name: 'FormComponentRuleEditor',
    components: {
        KCheckbox: __vue_component__$v,
        KChangeOption: __vue_component__$u
    },
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        configRules() {
        },
        getAllFields(formDataList, fields) {
        }
    }
};

/* script */ var __vue_script__$t = script$t;

/* template */
var __vue_render__$t = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      typeof _vm.selectItem.rules !== "undefined" &&
      _vm.selectItem.rules.length > 0
        ? _c(
            "a-form-item",
            { attrs: { label: "校验" } },
            [
              _c("k-checkbox", {
                attrs: { label: _vm.$t("必填") },
                model: {
                  value: _vm.selectItem.rules[0].required,
                  callback: function($$v) {
                    _vm.$set(_vm.selectItem.rules[0], "required", $$v);
                  },
                  expression: "selectItem.rules[0].required"
                }
              }),
              _vm._v(" "),
              _c("a-input", {
                attrs: { placeholder: _vm.$t("必填校验提示信息") },
                model: {
                  value: _vm.selectItem.rules[0].message,
                  callback: function($$v) {
                    _vm.$set(_vm.selectItem.rules[0], "message", $$v);
                  },
                  expression: "selectItem.rules[0].message"
                }
              }),
              _vm._v(" "),
              _c("k-change-option", {
                attrs: { type: "rules" },
                model: {
                  value: _vm.selectItem.rules,
                  callback: function($$v) {
                    _vm.$set(_vm.selectItem, "rules", $$v);
                  },
                  expression: "selectItem.rules"
                }
              })
            ],
            1
          )
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$t = [];
__vue_render__$t._withStripped = true;

  /* style */
  var __vue_inject_styles__$t = undefined;
  /* scoped */
  var __vue_scope_id__$t = undefined;
  /* module identifier */
  var __vue_module_identifier__$t = undefined;
  /* functional template */
  var __vue_is_functional_template__$t = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$t = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$t, staticRenderFns: __vue_staticRenderFns__$t },
    __vue_inject_styles__$t,
    __vue_script__$t,
    __vue_scope_id__$t,
    __vue_is_functional_template__$t,
    __vue_module_identifier__$t,
    false,
    undefined,
    undefined,
    undefined
  );

var script$s = {
    name: 'CompDefaultValueEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$s = script$s;
/* template */
var __vue_render__$s = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: "默认值" } },
    [
      _vm.selectItem.type === "switch"
        ? [
            _c("a-switch", {
              model: {
                value: _vm.editorValue,
                callback: function($$v) {
                  _vm.editorValue = $$v;
                },
                expression: "editorValue"
              }
            })
          ]
        : ["number", "slider"].includes(_vm.selectItem.type)
        ? [
            _c("a-input-number", {
              attrs: {
                step: _vm.options.step,
                min: _vm.options.min || -Infinity,
                max: _vm.options.max || Infinity
              },
              model: {
                value: _vm.editorValue,
                callback: function($$v) {
                  _vm.editorValue = $$v;
                },
                expression: "editorValue"
              }
            })
          ]
        : _vm.selectItem.type === "rate"
        ? [
            _c("a-rate", {
              attrs: {
                allowHalf: _vm.options.allowHalf,
                count: _vm.options.max
              },
              model: {
                value: _vm.editorValue,
                callback: function($$v) {
                  _vm.editorValue = $$v;
                },
                expression: "editorValue"
              }
            })
          ]
        : [
            _c("a-input", {
              attrs: {
                placeholder:
                  typeof _vm.options.format === "undefined"
                    ? "请输入"
                    : _vm.options.format
              },
              model: {
                value: _vm.editorValue,
                callback: function($$v) {
                  _vm.editorValue = $$v;
                },
                expression: "editorValue"
              }
            })
          ]
    ],
    2
  )
};
var __vue_staticRenderFns__$s = [];
__vue_render__$s._withStripped = true;

  /* style */
  var __vue_inject_styles__$s = undefined;
  /* scoped */
  var __vue_scope_id__$s = "data-v-62c2758e";
  /* module identifier */
  var __vue_module_identifier__$s = undefined;
  /* functional template */
  var __vue_is_functional_template__$s = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$s = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$s, staticRenderFns: __vue_staticRenderFns__$s },
    __vue_inject_styles__$s,
    __vue_script__$s,
    __vue_scope_id__$s,
    __vue_is_functional_template__$s,
    __vue_module_identifier__$s,
    false,
    undefined,
    undefined,
    undefined
  );

var script$r = {
    name: 'FormSelectDefaultValueEditor',
    mixins: [editorComponentMixin],
    data() {
        return {
            isLoadingOptions: false,
            previousParams: null,
            queryOptionsUrl: '/onlcode/saas/option/queryOptionData'
        };
    },
    computed: {
        selectOptions() {
            if (this.selectItem.dynamic === 'static') {
                return this.selectItem.options;
            } else if (['dict', 'table'].includes(this.selectItem.dynamic)) {
                return this.selectItem.remoteOptionsData;
            } else {
                return [];
            }
        }
    },
    methods: {
        getDistalOptions() {
            if (this.selectItem.dynamic === 'static') {
                return;
            } else if (['dict', 'table'].includes(this.selectItem.dynamic)) {
                var params = {
                    ...this.selectItem.distal,
                    dictConditionList: Array.isArray(this.selectItem.distal.dictConditionList) ? JSON.stringify(this.selectItem.distal.dictConditionList) : undefined
                };
                if (this.previousParams && JSON.stringify(this.previousParams) === JSON.stringify(params)) {
                    return;
                }
                if (this.selectItem.dynamic === 'dict' && (!params.dictField || !params.dictCode)) return;
                if (this.selectItem.dynamic === 'table' && (!params.tableId || !params.columnId)) return;
                this.isLoadingOptions = true;
                manage.postActionAsHeader({
                    url: this.queryOptionsUrl,
                    params,
                    headers: {
                        saas: this.$route.query.projectCode
                    }
                }).then(res => {
                    this.isLoadingOptions = false;
                    this.previousParams = params;
                    this.$set(this.selectItem, 'remoteOptionsData', res.result.map(item => {
                        return {
                            value: item.value,
                            label: item.text
                        };
                    }));
                }).catch(err => {
                    this.previousParams = null;
                    this.isLoadingOptions = false;
                });
            }
        }
    }
};

/* script */ var __vue_script__$r = script$r;
/* template */
var __vue_render__$r = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("默认值") } },
    [
      _c(
        "a-select",
        {
          attrs: {
            "show-search": "",
            placeholder: "请选择默认值",
            allowClear: "",
            optionFilterProp: "label"
          },
          on: { focus: _vm.getDistalOptions },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _vm.isLoadingOptions
            ? _c("a-spin", {
                attrs: { slot: "notFoundContent", size: "small" },
                slot: "notFoundContent"
              })
            : _vm._e(),
          _vm._v(" "),
          _vm._l(_vm.selectOptions, function(item) {
            return _c(
              "a-select-option",
              {
                key: item.value,
                attrs: { value: item.value, label: item.label }
              },
              [_vm._v(_vm._s(item.label))]
            )
          })
        ],
        2
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$r = [];
__vue_render__$r._withStripped = true;

  /* style */
  var __vue_inject_styles__$r = undefined;
  /* scoped */
  var __vue_scope_id__$r = undefined;
  /* module identifier */
  var __vue_module_identifier__$r = undefined;
  /* functional template */
  var __vue_is_functional_template__$r = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$r = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$r, staticRenderFns: __vue_staticRenderFns__$r },
    __vue_inject_styles__$r,
    __vue_script__$r,
    __vue_scope_id__$r,
    __vue_is_functional_template__$r,
    __vue_module_identifier__$r,
    false,
    undefined,
    undefined,
    undefined
  );

var script$q = {
    name: 'FormAlertTypeEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$q = script$q;
/* template */
var __vue_render__$q = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("类型") } },
    [
      _c(
        "a-radio-group",
        {
          attrs: { buttonStyle: "solid" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-radio", { attrs: { value: "success" } }, [_vm._v("success")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "info" } }, [_vm._v("info")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "warning" } }, [_vm._v("warning")]),
          _vm._v(" "),
          _c("a-radio", { attrs: { value: "error" } }, [_vm._v("error")])
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$q = [];
__vue_render__$q._withStripped = true;

  /* style */
  var __vue_inject_styles__$q = undefined;
  /* scoped */
  var __vue_scope_id__$q = undefined;
  /* module identifier */
  var __vue_module_identifier__$q = undefined;
  /* functional template */
  var __vue_is_functional_template__$q = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$q = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$q, staticRenderFns: __vue_staticRenderFns__$q },
    __vue_inject_styles__$q,
    __vue_script__$q,
    __vue_scope_id__$q,
    __vue_is_functional_template__$q,
    __vue_module_identifier__$q,
    false,
    undefined,
    undefined,
    undefined
  );

var script$p = {
    name: 'FormAlertOptionsAttrEditor',
    mixins: [editorComponentMixin],
    components: {
        kCheckbox: __vue_component__$v
    },
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$p = script$p;
/* template */
var __vue_render__$p = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("操作属性") } },
    [
      _c("kCheckbox", {
        attrs: { label: _vm.$t("显示图标") },
        model: {
          value: _vm.options.showIcon,
          callback: function($$v) {
            _vm.$set(_vm.options, "showIcon", $$v);
          },
          expression: "options.showIcon"
        }
      }),
      _vm._v(" "),
      _c("kCheckbox", {
        attrs: { label: _vm.$t("无边框") },
        model: {
          value: _vm.options.banner,
          callback: function($$v) {
            _vm.$set(_vm.options, "banner", $$v);
          },
          expression: "options.banner"
        }
      }),
      _vm._v(" "),
      _c("kCheckbox", {
        attrs: { label: _vm.$t("可关闭") },
        model: {
          value: _vm.options.closable,
          callback: function($$v) {
            _vm.$set(_vm.options, "closable", $$v);
          },
          expression: "options.closable"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$p = [];
__vue_render__$p._withStripped = true;

  /* style */
  var __vue_inject_styles__$p = undefined;
  /* scoped */
  var __vue_scope_id__$p = "data-v-a5c35db4";
  /* module identifier */
  var __vue_module_identifier__$p = undefined;
  /* functional template */
  var __vue_is_functional_template__$p = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$p = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$p, staticRenderFns: __vue_staticRenderFns__$p },
    __vue_inject_styles__$p,
    __vue_script__$p,
    __vue_scope_id__$p,
    __vue_is_functional_template__$p,
    __vue_module_identifier__$p,
    false,
    undefined,
    undefined,
    undefined
  );

var script$o = {
    name: 'SelectAddFilterCondition',
    props: {
        dbTableColumns: {
            type: Array,
            default() {
                return [];
            }
        }
    },
    data() {
        return {
            visible: false,
            title: '添加过滤条件',
            callback: null,
            confirmLoading: false,
            conditionData: {
                columnName: undefined,
                operator: undefined,
                columnValue: undefined
            },
            operatorList: [{
                value: 'eq',
                label: '相等'
            }, {
                value: 'lt',
                label: '小于'
            }, {
                value: 'lte',
                label: '小于等于'
            }, {
                value: 'gt',
                label: '大于'
            }, {
                value: 'gte',
                label: '大于等于'
            }, {
                value: 'not_eq',
                label: '不相等'
            }, {
                value: 'like',
                label: '相似'
            }, {
                value: 'left_like',
                label: '左相似'
            }, {
                value: 'right_like',
                label: '右相似'
            }]
        };
    },
    methods: {
        filterDataTableOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        openModal({config, callback}) {
            if (config) {
                this.title = '添加过滤条件';
            }
            this.conditionData = this.$options.data().conditionData;
            this.callback = callback;
            this.visible = true;
        },
        handleOk() {
            var status = Object.keys(this.conditionData).every(key => this.conditionData[key]);
            if (!status) {
                return this.$message.warning('请填写完整条件');
            }
            let renderText = '';
            this.dbTableColumns.forEach(item => {
                if (item.dbFieldName === this.conditionData.columnName) {
                    renderText += item.dbFieldTxt;
                }
            });
            this.operatorList.forEach(item => {
                if (item.value === this.conditionData.operator) {
                    renderText += item.label;
                }
            });
            renderText += this.conditionData.columnValue;
            this.callback && this.callback({
                ...this.conditionData,
                renderText
            });
            this.visible = false;
        },
        handleCancel() {
            this.visible = false;
        }
    }
};

/* script */ var __vue_script__$o = script$o;
/* template */
var __vue_render__$o = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "add-filter-condition-modal" },
    [
      _c(
        "a-modal",
        {
          attrs: {
            title: _vm.title,
            visible: _vm.visible,
            width: 600,
            "confirm-loading": _vm.confirmLoading
          },
          on: { ok: _vm.handleOk, cancel: _vm.handleCancel }
        },
        [
          _c(
            "div",
            { staticClass: "filter-condition-content" },
            [
              _c(
                "a-select",
                {
                  attrs: {
                    placeholder: _vm.$t("请选择数据字段"),
                    allowClear: "",
                    showSearch: "",
                    "filter-option": _vm.filterDataTableOption
                  },
                  model: {
                    value: _vm.conditionData.columnName,
                    callback: function($$v) {
                      _vm.$set(_vm.conditionData, "columnName", $$v);
                    },
                    expression: "conditionData.columnName"
                  }
                },
                _vm._l(_vm.dbTableColumns, function(columnConfig) {
                  return _c(
                    "a-select-option",
                    {
                      key: columnConfig.dbFieldName,
                      attrs: { value: columnConfig.dbFieldName }
                    },
                    [
                      _vm._v(
                        "\n        " +
                          _vm._s(
                            columnConfig.dbFieldTxt +
                              "(" +
                              columnConfig.dbFieldNameUp +
                              ")"
                          ) +
                          "\n      "
                      )
                    ]
                  )
                }),
                1
              ),
              _vm._v(" "),
              _c(
                "a-select",
                {
                  attrs: { placeholder: _vm.$t("请选择条件"), allowClear: "" },
                  model: {
                    value: _vm.conditionData.operator,
                    callback: function($$v) {
                      _vm.$set(_vm.conditionData, "operator", $$v);
                    },
                    expression: "conditionData.operator"
                  }
                },
                _vm._l(_vm.operatorList, function(operator) {
                  return _c(
                    "a-select-option",
                    { key: operator.value, attrs: { value: operator.value } },
                    [_vm._v("\n        " + _vm._s(operator.label) + "\n      ")]
                  )
                }),
                1
              ),
              _vm._v(" "),
              _c("a-input", {
                attrs: { width: "180px", placeholder: _vm.$t("请输入过滤值") },
                model: {
                  value: _vm.conditionData.columnValue,
                  callback: function($$v) {
                    _vm.$set(_vm.conditionData, "columnValue", $$v);
                  },
                  expression: "conditionData.columnValue"
                }
              })
            ],
            1
          )
        ]
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$o = [];
__vue_render__$o._withStripped = true;

  /* style */
  var __vue_inject_styles__$o = undefined;
  /* scoped */
  var __vue_scope_id__$o = undefined;
  /* module identifier */
  var __vue_module_identifier__$o = undefined;
  /* functional template */
  var __vue_is_functional_template__$o = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$o = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$o, staticRenderFns: __vue_staticRenderFns__$o },
    __vue_inject_styles__$o,
    __vue_script__$o,
    __vue_scope_id__$o,
    __vue_is_functional_template__$o,
    __vue_module_identifier__$o,
    false,
    undefined,
    undefined,
    undefined
  );

var script$n = {
    name: 'ComponentEventEditorModal',
    components: {},
    data() {
        return {
            visible: false,
            eventValue: '',
            callback: null
        };
    },
    computed: {},
    watch: {},
    created() {},
    methods: {
        openModal(customOnChange, callback) {
            this.visible = true;
            console.log(this.$refs.myEditor);
            this.eventValue = customOnChange;
            this.callback = callback;
        },
        handleOk() {
            if (typeof this.callback === 'function') {
                this.callback(this.eventValue);
            }
            this.handleClose();
        },
        handleClose() {
            Object.assign(this.$data, this.$options.data.call(this));
            this.visible = false;
        }
    }
};

/* script */ var __vue_script__$n = script$n;
/* template */
var __vue_render__$n = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-modal",
    {
      attrs: {
        title: "自定义交互",
        width: "872px",
        visible: _vm.visible,
        destroyOnClose: true,
        "ok-text": "确认",
        "cancel-text": "取消"
      },
      on: {
        "update:visible": function($event) {
          _vm.visible = $event;
        },
        ok: _vm.handleOk,
        cancel: _vm.handleClose,
        close: _vm.handleClose
      }
    },
    [
      _c("g-code-editor", {
        ref: "myEditor",
        attrs: { fullScreen: true, language: "javascript" },
        model: {
          value: _vm.eventValue,
          callback: function($$v) {
            _vm.eventValue = $$v;
          },
          expression: "eventValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$n = [];
__vue_render__$n._withStripped = true;

  /* style */
  var __vue_inject_styles__$n = undefined;
  /* scoped */
  var __vue_scope_id__$n = undefined;
  /* module identifier */
  var __vue_module_identifier__$n = undefined;
  /* functional template */
  var __vue_is_functional_template__$n = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$n = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$n, staticRenderFns: __vue_staticRenderFns__$n },
    __vue_inject_styles__$n,
    __vue_script__$n,
    __vue_scope_id__$n,
    __vue_is_functional_template__$n,
    __vue_module_identifier__$n,
    false,
    undefined,
    undefined,
    undefined
  );

var script$m = {
    name: 'FormSelectOptionConfigEditor',
    components: {
        KChangeOption: __vue_component__$u,
        SelectAddFilterCondition: __vue_component__$o,
        ComponentEventEditorModal: __vue_component__$n
    },
    mixins: [editorComponentMixin],
    inject: {},
    data() {
        return {
            dictList: [],
            dbTableColumns: [],
            dbTableList: []
        };
    },
    computed: {},
    watch: {
        selectItem(val) {
            if (ylyFormConstants.SELECT_COMPONENT_CODE.includes(val.code)) {
                this.getSelectCompData();
            }
        }
    },
    created() {
        if (!Array.isArray(this.selectItem.distal.dictConditionList)) {
            this.$set(this.selectItem.distal, 'dictConditionList', []);
        }
        if (!this.selectItem.customOptionsFunc) {
            this.selectItem.customOptionsFunc = '';
        }
        this.dynamicTypeChange();
    },
    methods: {
        dynamicTypeChange(value) {
            this.selectItem.distal.dictType = this.selectItem.dynamic;
            if (this.selectItem.dynamic === 'dict') {
                this.getDictList();
            } else if (this.selectItem.dynamic === 'table') {
                this.getDbTableList();
            }
        },
        filterFiledOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        getDictList() {
            var params = {};
            let saas = this.$route.query.projectCode;
            this.$api.getDictList(params, {
                saas
            }).then(res => {
                if (res.code == '200') {
                    this.dictList = res.result;
                }
            }).catch(err => {
                this.dictList = [];
                console.error(err);
            });
        },
        getSelectCompData() {
            var {distal = {}} = this.selectItem;
            if (distal.dictType === 'table') {
                this.getDbTableColumns(distal.tableId);
            }
            if (distal.dictType === 'dict') {
                this.getDictList();
            }
        },
        getDbTableColumns(tableId) {
            if (!tableId) return;
            var params = {
                tableId
            };
            this.$api.getDbTableColumns(params).then(res => {
                this.dbTableColumns = res.result || [];
            }).catch(err => {
                this.dbTableColumns = [];
                console.error(err);
            });
        },
        getDbTableList() {
            var params = {
                dbId: this.formPageConfig.dbId
            };
            this.$api.queryTableByDatabase(params).then(res => {
                this.dbTableList = res.result || [];
                if (this.selectItem.distal.tableId) {
                    var selectedTable = this.dbTableList.find(item => item.id === this.selectItem.distal.tableId);
                    if (selectedTable) {
                        this.getDbTableColumns(selectedTable.id);
                    }
                }
            }).catch(err => {
                this.dbTableList = [];
                console.error(err);
            });
        },
        handleChangeDbTable(tableId) {
            this.$set(this.selectItem.distal, 'dictField', undefined);
            var tableConfig = this.dbTableList.find(item => item.id === tableId);
            if (tableConfig) {
                this.$set(this.selectItem.distal, 'dictTable', tableConfig.tableName);
                this.$set(this.selectItem.distal, 'columnId', '');
                this.$set(this.selectItem.distal, 'dictText', '');
                this.getDbTableColumns(tableId);
            }
        },
        handleChangeDictField(columnId) {
            var columnConfig = this.dbTableColumns.find(item => item.id === columnId);
            if (columnConfig) {
                this.$set(this.selectItem.distal, 'dictField', columnConfig.dbFieldName);
            }
        },
        handleAddFilterCondition() {
            this.$refs.selectAddFilterCondition && this.$refs.selectAddFilterCondition.openModal({
                callback: conditionData => {
                    console.log(conditionData);
                    if (Array.isArray(this.selectItem.distal.dictConditionList)) {
                        this.selectItem.distal.dictConditionList.push(conditionData);
                    }
                }
            });
        },
        deleteDictConditionItem(item, index) {
            this.selectItem.distal.dictConditionList.splice(index, 1);
        },
        filterDataTableOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        handleClickCustomSelectOption() {
            this.$refs.componentEventEditorModal.openModal(this.selectItem.customOptionsFunc, func => {
                this.$set(this.selectItem, 'customOptionsFunc', func);
            });
        }
    }
};

/* script */ var __vue_script__$m = script$m;
/* template */
var __vue_render__$m = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("选项配置") } },
    [
      _c(
        "a-radio-group",
        {
          attrs: { size: "small", buttonStyle: "solid" },
          on: { change: _vm.dynamicTypeChange },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        [
          _c("a-radio-button", { attrs: { value: "static" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("静态数据")) + "\n    ")
          ]),
          _vm._v(" "),
          _c("a-radio-button", { attrs: { value: "dict" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("字典数据")) + "\n    ")
          ]),
          _vm._v(" "),
          _c("a-radio-button", { attrs: { value: "table" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("远端数据")) + "\n    ")
          ]),
          _vm._v(" "),
          _c("a-radio-button", { attrs: { value: "custom" } }, [
            _vm._v("\n      " + _vm._s(_vm.$t("自定义")) + "\n    ")
          ])
        ],
        1
      ),
      _vm._v(" "),
      _c(
        "a-select",
        {
          directives: [
            {
              name: "show",
              rawName: "v-show",
              value: _vm.selectItem.dynamic === "dict",
              expression: "selectItem.dynamic === 'dict'"
            }
          ],
          attrs: { "show-search": "", "filter-option": _vm.filterFiledOption },
          model: {
            value: _vm.selectItem.distal.dictCode,
            callback: function($$v) {
              _vm.$set(_vm.selectItem.distal, "dictCode", $$v);
            },
            expression: "selectItem.distal.dictCode"
          }
        },
        _vm._l(_vm.dictList, function(dict) {
          return _c("a-select-option", { key: dict.dictCode }, [
            _vm._v(
              "\n      " +
                _vm._s(dict.dictName + "(" + dict.dictCode + ")") +
                "\n    "
            )
          ])
        }),
        1
      ),
      _vm._v(" "),
      _c("k-change-option", {
        directives: [
          {
            name: "show",
            rawName: "v-show",
            value: _vm.selectItem.dynamic === "static",
            expression: "selectItem.dynamic === 'static'"
          }
        ],
        model: {
          value: _vm.selectItem.options,
          callback: function($$v) {
            _vm.$set(_vm.selectItem, "options", $$v);
          },
          expression: "selectItem.options"
        }
      }),
      _vm._v(" "),
      _c(
        "div",
        {
          directives: [
            {
              name: "show",
              rawName: "v-show",
              value: _vm.selectItem.dynamic === "table",
              expression: "selectItem.dynamic === 'table'"
            }
          ]
        },
        [
          _c(
            "a-select",
            {
              attrs: {
                placeholder: _vm.$t("请选择数据表"),
                allowClear: "",
                showSearch: "",
                "filter-option": _vm.filterDataTableOption
              },
              on: { change: _vm.handleChangeDbTable },
              model: {
                value: _vm.selectItem.distal.tableId,
                callback: function($$v) {
                  _vm.$set(_vm.selectItem.distal, "tableId", $$v);
                },
                expression: "selectItem.distal.tableId"
              }
            },
            _vm._l(_vm.dbTableList, function(tableConfig) {
              return _c(
                "a-select-option",
                { key: tableConfig.id, attrs: { value: tableConfig.id } },
                [
                  _vm._v(
                    "\n        " +
                      _vm._s(
                        tableConfig.tableTxt + "(" + tableConfig.tableName + ")"
                      ) +
                      "\n      "
                  )
                ]
              )
            }),
            1
          ),
          _vm._v(" "),
          _c(
            "a-select",
            {
              attrs: {
                placeholder: _vm.$t("请选择数据字段"),
                allowClear: "",
                showSearch: "",
                "filter-option": _vm.filterDataTableOption
              },
              on: { change: _vm.handleChangeDictField },
              model: {
                value: _vm.selectItem.distal.columnId,
                callback: function($$v) {
                  _vm.$set(_vm.selectItem.distal, "columnId", $$v);
                },
                expression: "selectItem.distal.columnId"
              }
            },
            _vm._l(_vm.dbTableColumns, function(columnConfig) {
              return _c(
                "a-select-option",
                { key: columnConfig.id, attrs: { value: columnConfig.id } },
                [
                  _vm._v(
                    "\n        " +
                      _vm._s(
                        columnConfig.dbFieldTxt +
                          "(" +
                          columnConfig.dbFieldNameUp +
                          ")"
                      ) +
                      "\n      "
                  )
                ]
              )
            }),
            1
          ),
          _vm._v(" "),
          _c(
            "a-select",
            {
              attrs: {
                allowClear: "",
                showSearch: "",
                "filter-option": _vm.filterDataTableOption,
                placeholder: _vm.$t("请选择数据文本")
              },
              model: {
                value: _vm.selectItem.distal.dictText,
                callback: function($$v) {
                  _vm.$set(_vm.selectItem.distal, "dictText", $$v);
                },
                expression: "selectItem.distal.dictText"
              }
            },
            _vm._l(_vm.dbTableColumns, function(columnConfig) {
              return _c(
                "a-select-option",
                {
                  key: columnConfig.id,
                  attrs: { value: columnConfig.dbFieldName }
                },
                [
                  _vm._v(
                    "\n        " +
                      _vm._s(
                        columnConfig.dbFieldTxt +
                          "(" +
                          columnConfig.dbFieldNameUp +
                          ")"
                      ) +
                      "\n      "
                  )
                ]
              )
            }),
            1
          ),
          _vm._v(" "),
          _c("a-input", {
            attrs: { placeholder: _vm.$t("请输入过滤条件") },
            model: {
              value: _vm.selectItem.distal.dictCondition,
              callback: function($$v) {
                _vm.$set(_vm.selectItem.distal, "dictCondition", $$v);
              },
              expression: "selectItem.distal.dictCondition"
            }
          }),
          _vm._v(" "),
          _vm._l(_vm.selectItem.distal.dictConditionList, function(
            item,
            index
          ) {
            return _c(
              "div",
              {
                staticStyle: {
                  display: "flex",
                  "align-items": "center",
                  "justify-content": "space-between"
                }
              },
              [
                _c("div", [_vm._v(_vm._s(item.renderText))]),
                _vm._v(" "),
                _c("a-icon", {
                  staticStyle: { "margin-right": "24px" },
                  attrs: { type: "delete" },
                  on: {
                    click: function($event) {
                      return _vm.deleteDictConditionItem(item, index)
                    }
                  }
                })
              ],
              1
            )
          }),
          _vm._v(" "),
          _c(
            "div",
            {
              staticClass: "add-filter-condition dynamic-table-options",
              on: { click: _vm.handleAddFilterCondition }
            },
            [
              _c("span", { staticStyle: { "margin-right": "12px" } }, [
                _vm._v(_vm._s(_vm.$t("添加过滤条件")))
              ]),
              _vm._v(" "),
              _c("a-icon", { attrs: { type: "plus-circle", theme: "filled" } })
            ],
            1
          ),
          _vm._v(" "),
          _c("SelectAddFilterCondition", {
            ref: "selectAddFilterCondition",
            attrs: { dbTableColumns: _vm.dbTableColumns }
          })
        ],
        2
      ),
      _vm._v(" "),
      _vm.selectItem.dynamic === "custom"
        ? _c("div", { on: { click: _vm.handleClickCustomSelectOption } }, [
            _vm._v(_vm._s("设置自定义获取值"))
          ])
        : _vm._e(),
      _vm._v(" "),
      _c("component-event-editor-modal", { ref: "componentEventEditorModal" })
    ],
    1
  )
};
var __vue_staticRenderFns__$m = [];
__vue_render__$m._withStripped = true;

  /* style */
  var __vue_inject_styles__$m = undefined;
  /* scoped */
  var __vue_scope_id__$m = "data-v-56f3b188";
  /* module identifier */
  var __vue_module_identifier__$m = undefined;
  /* functional template */
  var __vue_is_functional_template__$m = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$m = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$m, staticRenderFns: __vue_staticRenderFns__$m },
    __vue_inject_styles__$m,
    __vue_script__$m,
    __vue_scope_id__$m,
    __vue_is_functional_template__$m,
    __vue_module_identifier__$m,
    false,
    undefined,
    undefined,
    undefined
  );

var script$l = {
    name: 'DateDefaultValueEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        handleChangeDateDefaultValue(val) {
            this.options.defaultValue = val.format(this.options.format);
        }
    }
};

/* script */ var __vue_script__$l = script$l;
/* template */
var __vue_render__$l = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: "默认值" } },
    [
      !_vm.options.range
        ? _c("a-date-picker", {
            staticStyle: { width: "100%" },
            attrs: {
              format: _vm.options.format,
              value: _vm.options.defaultValue
            },
            on: { change: _vm.handleChangeDateDefaultValue }
          })
        : _vm._e(),
      _vm._v(" "),
      _vm.options.range
        ? _c("a-range-picker", {
            model: {
              value: _vm.options.rangeDefaultValue[0],
              callback: function($$v) {
                _vm.$set(_vm.options.rangeDefaultValue, 0, $$v);
              },
              expression: "options.rangeDefaultValue[0]"
            }
          })
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$l = [];
__vue_render__$l._withStripped = true;

  /* style */
  var __vue_inject_styles__$l = undefined;
  /* scoped */
  var __vue_scope_id__$l = undefined;
  /* module identifier */
  var __vue_module_identifier__$l = undefined;
  /* functional template */
  var __vue_is_functional_template__$l = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$l = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$l, staticRenderFns: __vue_staticRenderFns__$l },
    __vue_inject_styles__$l,
    __vue_script__$l,
    __vue_scope_id__$l,
    __vue_is_functional_template__$l,
    __vue_module_identifier__$l,
    false,
    undefined,
    undefined,
    undefined
  );

var script$k = {
    name: "SystemDefaultValueEditor",
    mixins: [editorComponentMixin],
    data() {
        return {
            defaultValOptions: []
        };
    },
    created() {
        var params = {
            projectId: this.$route.query.projectId
        };
        this.$api.getFormFieldDefaultVal(params).then(res => {
            this.defaultValOptions = res.result;
        });
    },
    methods: {}
};

/* script */ var __vue_script__$k = script$k;
/* template */
var __vue_render__$k = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("获取系统默认值") } },
    [
      _c(
        "a-select",
        {
          staticStyle: { width: "100%" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        _vm._l(_vm.defaultValOptions, function(val, index) {
          return _c(
            "a-select-option",
            { key: index, attrs: { value: val.value } },
            [_vm._v("\n      " + _vm._s(val.text) + "\n    ")]
          )
        }),
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$k = [];
__vue_render__$k._withStripped = true;

  /* style */
  var __vue_inject_styles__$k = undefined;
  /* scoped */
  var __vue_scope_id__$k = undefined;
  /* module identifier */
  var __vue_module_identifier__$k = undefined;
  /* functional template */
  var __vue_is_functional_template__$k = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$k = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$k, staticRenderFns: __vue_staticRenderFns__$k },
    __vue_inject_styles__$k,
    __vue_script__$k,
    __vue_scope_id__$k,
    __vue_is_functional_template__$k,
    __vue_module_identifier__$k,
    false,
    undefined,
    undefined,
    undefined
  );

var script$j = {
    name: 'TextPaddingLeftEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    methods: {}
};

/* script */ var __vue_script__$j = script$j;

/* template */
var __vue_render__$j = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("文字左边距") } },
    [
      _c("a-input", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$j = [];
__vue_render__$j._withStripped = true;

  /* style */
  var __vue_inject_styles__$j = undefined;
  /* scoped */
  var __vue_scope_id__$j = undefined;
  /* module identifier */
  var __vue_module_identifier__$j = undefined;
  /* functional template */
  var __vue_is_functional_template__$j = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$j = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$j, staticRenderFns: __vue_staticRenderFns__$j },
    __vue_inject_styles__$j,
    __vue_script__$j,
    __vue_scope_id__$j,
    __vue_is_functional_template__$j,
    __vue_module_identifier__$j,
    false,
    undefined,
    undefined,
    undefined
  );

var script$i = {
    name: 'FormTextOptionsAttrEditor',
    components: {
        KCheckbox: __vue_component__$v
    },
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__$i = script$i;
/* template */
var __vue_render__$i = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("操作属性") } },
    [
      _c("k-checkbox", {
        attrs: { label: _vm.$t("显示必选标记") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$i = [];
__vue_render__$i._withStripped = true;

  /* style */
  var __vue_inject_styles__$i = undefined;
  /* scoped */
  var __vue_scope_id__$i = "data-v-49efeb74";
  /* module identifier */
  var __vue_module_identifier__$i = undefined;
  /* functional template */
  var __vue_is_functional_template__$i = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$i = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$i, staticRenderFns: __vue_staticRenderFns__$i },
    __vue_inject_styles__$i,
    __vue_script__$i,
    __vue_scope_id__$i,
    __vue_is_functional_template__$i,
    __vue_module_identifier__$i,
    false,
    undefined,
    undefined,
    undefined
  );

var script$h = {
    name: 'FormInputOptionsAttrEditor',
    components: {},
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    computed: {
        optionAttributeList() {
            var optionList = [{
                code: 'disabled',
                label: this.$t('禁用')
            }, {
                code: 'editStatusDisabled',
                label: this.$t('编辑表单时禁用')
            }, {
                code: 'clearable',
                label: this.$t('可清除')
            }, {
                code: 'multiple',
                label: this.$t('多选')
            }, {
                code: 'range',
                label: this.$t('范围选择')
            }, {
                code: 'showInput',
                label: this.$t('显示输入框')
            }, {
                code: 'showTime',
                label: this.$t('时间选择器')
            }, {
                code: 'allowHalf',
                label: this.$t('允许半选')
            }, {
                code: 'showLabel',
                label: this.$t('显示Label')
            }, {
                code: 'hidden',
                label: this.$t('隐藏')
            }, {
                code: 'editStatusHidden',
                label: this.$t('编辑表单时隐藏')
            }];
            return optionList.filter(item => this.editorInfo.allowField && this.editorInfo.allowField.includes(item.code));
        }
    },
    methods: {
        handleChangeAttr(value, option) {
            if (!option.code) return;
            this.updateSelectConfigByField(option.code, value);
        }
    }
};

/* script */ var __vue_script__$h = script$h;
/* template */
var __vue_render__$h = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("操作属性") } },
    _vm._l(_vm.optionAttributeList, function(item) {
      return _c(
        "div",
        { key: item.code, staticClass: "option-attribute" },
        [
          _c("div", [_vm._v(_vm._s(item.label))]),
          _vm._v(" "),
          _c("a-switch", {
            attrs: {
              checked: _vm.getSelectConfigByField(item.code),
              size: "small"
            },
            on: {
              change: function(e) {
                return _vm.handleChangeAttr(e, item)
              }
            }
          })
        ],
        1
      )
    }),
    0
  )
};
var __vue_staticRenderFns__$h = [];
__vue_render__$h._withStripped = true;

  /* style */
  var __vue_inject_styles__$h = undefined;
  /* scoped */
  var __vue_scope_id__$h = "data-v-f1d512d4";
  /* module identifier */
  var __vue_module_identifier__$h = undefined;
  /* functional template */
  var __vue_is_functional_template__$h = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$h = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$h, staticRenderFns: __vue_staticRenderFns__$h },
    __vue_inject_styles__$h,
    __vue_script__$h,
    __vue_scope_id__$h,
    __vue_is_functional_template__$h,
    __vue_module_identifier__$h,
    false,
    undefined,
    undefined,
    undefined
  );

var script$g = {
    name: 'FormCustomEventEditor',
    components: {
        ComponentEventEditorModal: __vue_component__$n
    },
    mixins: [editorComponentMixin],
    data() {
        return {
            customEventList: [{
                code: 'customOnChange',
                label: this.$t('数据更改事件')
            }, {
                code: 'customOnCreated',
                label: this.$t('初始化事件')
            }, {
                code: 'customOnEnter',
                label: this.$t('输入框Enter事件')
            }]
        };
    },
    computed: {
        customEventFuncMap: {
            get() {
                return this.selectItem.methods;
            },
            set(val) {
                this.selectItem.methods = val;
            }
        }
    },
    mounted() {},
    methods: {
        handleOpenEventEditorModal(customEventCode) {
            if (!this.selectItem.methods) {
                this.$set(this.selectItem, 'methods', {});
            }
            if (!this.customEventFuncMap[customEventCode]) {
                this.$set(this.customEventFuncMap, customEventCode, '');
            }
            this.$refs.componentEventEditorModal.openModal(this.customEventFuncMap[customEventCode], func => {
                this.setCustomEventContent(customEventCode, func);
            });
        },
        setCustomEventContent(customEventCode, func) {
            this.$set(this.customEventFuncMap, customEventCode, func);
        }
    }
};

/* script */ var __vue_script__$g = script$g;

/* template */
var __vue_render__$g = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("自定义事件") } },
    [
      _vm._l(_vm.customEventList, function(item) {
        return _c(
          "a-button",
          {
            key: item.code,
            on: {
              click: function() {
                return _vm.handleOpenEventEditorModal(item.code)
              }
            }
          },
          [_vm._v("\n    " + _vm._s(item.label) + "\n  ")]
        )
      }),
      _vm._v(" "),
      _c("component-event-editor-modal", { ref: "componentEventEditorModal" })
    ],
    2
  )
};
var __vue_staticRenderFns__$g = [];
__vue_render__$g._withStripped = true;

  /* style */
  var __vue_inject_styles__$g = undefined;
  /* scoped */
  var __vue_scope_id__$g = undefined;
  /* module identifier */
  var __vue_module_identifier__$g = undefined;
  /* functional template */
  var __vue_is_functional_template__$g = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$g = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$g, staticRenderFns: __vue_staticRenderFns__$g },
    __vue_inject_styles__$g,
    __vue_script__$g,
    __vue_scope_id__$g,
    __vue_is_functional_template__$g,
    __vue_module_identifier__$g,
    false,
    undefined,
    undefined,
    undefined
  );

var script$f = {
    name: 'FormComponentAlignTypeEditor',
    mixins: [editorComponentMixin],
    data() {
        return {
            widthOptions: [{
                value: 'left',
                label: '居左'
            }, {
                value: 'center',
                label: '居中'
            }, {
                value: 'right',
                label: '居右'
            }]
        };
    },
    methods: {}
};

/* script */ var __vue_script__$f = script$f;
/* template */
var __vue_render__$f = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("对其方式") } },
    [
      _c(
        "a-radio-group",
        {
          attrs: { size: "small" },
          model: {
            value: _vm.editorValue,
            callback: function($$v) {
              _vm.editorValue = $$v;
            },
            expression: "editorValue"
          }
        },
        _vm._l(_vm.widthOptions, function(item) {
          return _c(
            "a-radio-button",
            { key: item.value, attrs: { value: item.value } },
            [_vm._v("\n      " + _vm._s(item.label) + "\n    ")]
          )
        }),
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$f = [];
__vue_render__$f._withStripped = true;

  /* style */
  var __vue_inject_styles__$f = undefined;
  /* scoped */
  var __vue_scope_id__$f = "data-v-61540d53";
  /* module identifier */
  var __vue_module_identifier__$f = undefined;
  /* functional template */
  var __vue_is_functional_template__$f = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$f = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$f, staticRenderFns: __vue_staticRenderFns__$f },
    __vue_inject_styles__$f,
    __vue_script__$f,
    __vue_scope_id__$f,
    __vue_is_functional_template__$f,
    __vue_module_identifier__$f,
    false,
    undefined,
    undefined,
    undefined
  );

var script$e = {
    name: 'CloudFunctionSelect',
    mixins: [editorComponentMixin, VxeGridMixin.VxeGridMixin],
    data() {
        return {
            visible: false,
            eventConfig: {
                'onClick': '点击时',
                'onFocus': '离开时',
                'onChange': '选中时',
                'onInput': '变换时',
                'onMounted': '页面加载时'
            },
            searchConfig: [{
                searchComponentType: "FORM_INPUT",
                placeholder: this.$t('请输入所属模块'),
                isShowLabel: false,
                searchLabel: this.$t('所属模块'),
                formFiledName: "functionModel"
            }],
            searchFormData: {},
            gridOptions: {
                columns: this.getDefaultTableColsConfig([{
                    type: "checkbox"
                }, {
                    title: this.$t('所属应用'),
                    field: "projectCode"
                }, {
                    title: this.$t('所属环境'),
                    field: "functionEnv",
                    width: 100,
                    slots: {
                        default: "functionEnv"
                    }
                }, {
                    title: this.$t('所属模块'),
                    field: "functionModel"
                }, {
                    title: this.$t('函数Code'),
                    field: "functionCode"
                }, {
                    title: this.$t('函数名称'),
                    field: "functionName"
                }]),
                customLeftButtons: [],
                height: '400px',
                currentKey: '',
                pagination: {
                    pageNo: 1,
                    pageSize: 10,
                    total: 0
                }
            },
            currentRow: null
        };
    },
    mounted() {},
    created() {},
    methods: {
        showEventProp(item) {
            if (item) {
                let obj = JSON.parse(item);
                return `${obj.eventModule}.${obj.eventFunctionName}`;
            }
            return '';
        },
        selectEvents(key) {
            this.currentKey = key;
            this.visible = true;
            this.gridOptions.pagination.pageNo = 1;
            this.gridOptions.pagination.pageSize = 10;
            this.searchQuery();
        },
        pageSizeChange(pageNo, pageSize) {
            this.gridOptions.pagination.pageNo = pageNo;
            this.gridOptions.pagination.pageSize = pageSize;
            this.searchQuery();
        },
        pageNoChange(pageNo) {
            this.gridOptions.pagination.pageNo = pageNo;
            this.searchQuery();
        },
        searchQuery() {
            var params = {
                ...this.searchFormData,
                pageNo: this.gridOptions.pagination.pageNo,
                pageSize: this.gridOptions.pagination.pageSize,
                projectId: this.$route.query.projectId
            };
            this.$api.queryFnByPage(params).then(res => {
                if (res.result) {
                    this.gridOptions.data = res.result.records;
                    this.gridOptions.pagination.total = res.result.total = res.result.total;
                } else {
                    this.gridOptions.data = [];
                    this.gridOptions.pagination.total = 0;
                }
            });
        },
        handleOk() {
            let rows = this.$refs.VGrid.$refs.GVxeGrid.getCheckboxRecords();
            if (rows.length != 1) {
                this.$message.warning(this.$t('请选择一条数据'));
                return;
            }
            let prop = {
                eventModule: rows[0].functionModel,
                eventFunctionName: rows[0].functionCode
            };
            this.selectItem[this.currentKey] = JSON.stringify(prop);
            this.gridOptions.data = [];
            this.gridOptions.pagination.total = 0;
            this.currentKey = '';
            this.visible = false;
        },
        handleCancel() {
            this.currentKey = '';
            this.gridOptions.data = [];
            this.gridOptions.pagination.total = 0;
            this.visible = false;
        }
    }
};

/* script */ var __vue_script__$e = script$e;

/* template */
var __vue_render__$e = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      _vm._l(_vm.selectItem.configEvents, function(key, index) {
        return _vm.eventConfig[key]
          ? _c(
              "a-form-item",
              { key: index, attrs: { label: "事件选择" } },
              [
                _c(
                  "a-button",
                  {
                    attrs: { type: "primary", size: "small" },
                    on: {
                      click: function() {
                        return _vm.selectEvents(key)
                      }
                    }
                  },
                  [
                    _vm._v(
                      "\n      " +
                        _vm._s(_vm.$t(_vm.eventConfig[key])) +
                        "\n    "
                    )
                  ]
                ),
                _vm._v(" "),
                _vm.selectItem[key]
                  ? _c(
                      "a-tag",
                      {
                        attrs: { closable: "" },
                        on: {
                          close: function() {
                            return (_vm.selectItem[key] = "")
                          }
                        }
                      },
                      [
                        _vm._v(
                          "\n      " +
                            _vm._s(_vm.showEventProp(_vm.selectItem[key])) +
                            "\n    "
                        )
                      ]
                    )
                  : _vm._e()
              ],
              1
            )
          : _vm._e()
      }),
      _vm._v(" "),
      _c(
        "a-modal",
        {
          attrs: {
            title: "选择云函数",
            visible: _vm.visible,
            width: "1200px",
            "ok-text": "确认",
            "cancel-text": "取消"
          },
          on: { ok: _vm.handleOk, cancel: _vm.handleCancel }
        },
        [
          _c("page-header", {
            attrs: {
              searchFormData: _vm.searchFormData,
              searchConfig: _vm.searchConfig
            },
            on: { buttonEventEmit: _vm.buttonEventEmit }
          }),
          _vm._v(" "),
          _c(
            "g-vxe-grid",
            _vm._b(
              {
                ref: "VGrid",
                attrs: { "row-config": { useKey: true } },
                on: {
                  "size-change": _vm.pageSizeChange,
                  "current-page-change": _vm.pageNoChange,
                  refreshData: _vm.searchQuery
                },
                scopedSlots: _vm._u([
                  {
                    key: "functionEnv",
                    fn: function(ref) {
                      var row = ref.row;
                      return [
                        _c("span", [
                          _vm._v(
                            _vm._s(
                              row.functionEnv === 1
                                ? _vm.$t("应用")
                                : _vm.$t("沙箱")
                            )
                          )
                        ])
                      ]
                    }
                  }
                ])
              },
              "g-vxe-grid",
              _vm.gridOptions,
              false
            )
          )
        ],
        1
      )
    ],
    2
  )
};
var __vue_staticRenderFns__$e = [];
__vue_render__$e._withStripped = true;

  /* style */
  var __vue_inject_styles__$e = undefined;
  /* scoped */
  var __vue_scope_id__$e = undefined;
  /* module identifier */
  var __vue_module_identifier__$e = undefined;
  /* functional template */
  var __vue_is_functional_template__$e = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$e = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$e, staticRenderFns: __vue_staticRenderFns__$e },
    __vue_inject_styles__$e,
    __vue_script__$e,
    __vue_scope_id__$e,
    __vue_is_functional_template__$e,
    __vue_module_identifier__$e,
    false,
    undefined,
    undefined,
    undefined
  );

var script$d = {
    name: 'FormDictSelect',
    mixins: [editorComponentMixin],
    data() {
        return {
            dictList: []
        };
    },
    mounted() {},
    created() {
        this.$api.getDictList({}, {
            saas: this.$route.query.projectCode
        }).then(res => {
            this.dictList = res.result || [];
        });
    },
    methods: {}
};

/* script */ var __vue_script__$d = script$d;

/* template */
var __vue_render__$d = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _vm.formSource.sourceContent.formActionType &&
    _vm.formSource.sourceContent.formActionType === "displayForm"
    ? _c(
        "div",
        [
          _c(
            "a-form-item",
            { attrs: { label: _vm.$t("字典选择") } },
            [
              _c(
                "a-select",
                {
                  attrs: {
                    "show-search": "",
                    optionFilterProp: "label",
                    placeholder: _vm.$t("请选择字典"),
                    allowClear: ""
                  },
                  model: {
                    value: _vm.editorValue,
                    callback: function($$v) {
                      _vm.editorValue = $$v;
                    },
                    expression: "editorValue"
                  }
                },
                _vm._l(_vm.dictList, function(item, index) {
                  return _c(
                    "a-select-option",
                    {
                      key: index,
                      attrs: { value: item.dictCode, label: item.dictName }
                    },
                    [
                      _vm._v(
                        "\n\t\t\t\t\t" + _vm._s(item.dictName) + "\n\t\t\t\t"
                      )
                    ]
                  )
                }),
                1
              )
            ],
            1
          )
        ],
        1
      )
    : _vm._e()
};
var __vue_staticRenderFns__$d = [];
__vue_render__$d._withStripped = true;

  /* style */
  var __vue_inject_styles__$d = undefined;
  /* scoped */
  var __vue_scope_id__$d = undefined;
  /* module identifier */
  var __vue_module_identifier__$d = undefined;
  /* functional template */
  var __vue_is_functional_template__$d = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$d = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$d, staticRenderFns: __vue_staticRenderFns__$d },
    __vue_inject_styles__$d,
    __vue_script__$d,
    __vue_scope_id__$d,
    __vue_is_functional_template__$d,
    __vue_module_identifier__$d,
    false,
    undefined,
    undefined,
    undefined
  );

var script$c = {
    name: 'StaticTextWeight',
    mixins: [editorComponentMixin],
    props: {},
    computed: {}
};

/* script */ var __vue_script__$c = script$c;

/* template */
var __vue_render__$c = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("是否加粗") } },
    [
      _c("a-switch", {
        attrs: { size: "small" },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$c = [];
__vue_render__$c._withStripped = true;

  /* style */
  var __vue_inject_styles__$c = undefined;
  /* scoped */
  var __vue_scope_id__$c = undefined;
  /* module identifier */
  var __vue_module_identifier__$c = undefined;
  /* functional template */
  var __vue_is_functional_template__$c = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$c = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$c, staticRenderFns: __vue_staticRenderFns__$c },
    __vue_inject_styles__$c,
    __vue_script__$c,
    __vue_scope_id__$c,
    __vue_is_functional_template__$c,
    __vue_module_identifier__$c,
    false,
    undefined,
    undefined,
    undefined
  );

var script$b = {
    name: 'SelectIsUserAttrEditor',
    mixins: [editorComponentMixin],
    data() {
        return {
            fieldNames: []
        };
    },
    created() {
        if (this.getSelectConfigByField('userAttriColumnId')) {
            this.clickFieldSelect();
        }
    },
    methods: {
        filterFiledOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        hangeChangeUserAttriName(e) {
            if (this.selectItem.field) {
                this.updateSelectConfigByField('userAttriName', e.target.value);
                this.selectItem.field.userAttriName = e.target.value;
            }
        },
        handleChangeCurrentUser(value) {
            this.updateSelectConfigByField('isCurrentUser', value);
        },
        handleChangeAttr(value) {
            if (value && !this.selectItem.model) {
                this.editorValue = false;
                return this.$message.warning('请先绑定字段');
            }
            if (this.selectItem.field) {
                this.selectItem.field.isUserAttri = value ? 1 : 0;
                if (!value) {
                    this.updateSelectConfigByField('userAttriName', '');
                    this.updateSelectConfigByField('userAttriColumnId', '');
                    this.selectItem.field.userAttriName = '';
                    this.selectItem.field.userAttriColumnId = '';
                }
            }
        },
        clickFieldSelect() {
            this.$api.queryFieldsByTable({
                id: this.formPageConfig.tableId
            }).then(res => {
                this.fieldNames = res.result.onlColumns;
            });
        },
        selectFieldSelect(val) {
            if (this.selectItem.field) {
                this.updateSelectConfigByField('userAttriColumnId', val);
                this.selectItem.field.userAttriColumnId = val;
            }
        }
    }
};

/* script */ var __vue_script__$b = script$b;

/* template */
var __vue_render__$b = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      _c(
        "a-form-item",
        { attrs: { label: _vm.$t("用户属性") } },
        [
          _c("a-switch", {
            attrs: { placeholder: _vm.$t("请输入"), size: "small" },
            on: { change: _vm.handleChangeAttr },
            model: {
              value: _vm.editorValue,
              callback: function($$v) {
                _vm.editorValue = $$v;
              },
              expression: "editorValue"
            }
          })
        ],
        1
      ),
      _vm._v(" "),
      _vm.editorValue
        ? [
            _c(
              "a-form-item",
              { attrs: { label: _vm.$t("用户属性名称") } },
              [
                _c("a-input", {
                  attrs: {
                    required: "",
                    placeholder: _vm.$t("请输入"),
                    value: _vm.getSelectConfigByField("userAttriName")
                  },
                  on: { change: _vm.hangeChangeUserAttriName }
                })
              ],
              1
            ),
            _vm._v(" "),
            _c(
              "a-form-item",
              { attrs: { label: _vm.$t("用户属性关联字段") } },
              [
                _c(
                  "a-select",
                  {
                    ref: "selectFieldName",
                    attrs: {
                      value: _vm.getSelectConfigByField("userAttriColumnId"),
                      "show-search": "",
                      dropdownMatchSelectWidth: false,
                      "filter-option": _vm.filterFiledOption,
                      required: ""
                    },
                    on: {
                      focus: _vm.clickFieldSelect,
                      change: function(val) {
                        return _vm.selectFieldSelect(val)
                      }
                    }
                  },
                  _vm._l(_vm.fieldNames, function(item, key) {
                    return _c(
                      "a-select-option",
                      { key: key, attrs: { value: item.id } },
                      [
                        _vm._v(
                          "\n          " +
                            _vm._s(
                              item.dbFieldName + "  (" + item.dbFieldTxt + ")"
                            ) +
                            "\n        "
                        )
                      ]
                    )
                  }),
                  1
                )
              ],
              1
            ),
            _vm._v(" "),
            _c(
              "a-form-item",
              { attrs: { label: _vm.$t("当前用户") } },
              [
                _c("a-switch", {
                  attrs: {
                    checked: _vm.getSelectConfigByField("isCurrentUser")
                  },
                  on: { change: _vm.handleChangeCurrentUser }
                })
              ],
              1
            )
          ]
        : _vm._e()
    ],
    2
  )
};
var __vue_staticRenderFns__$b = [];
__vue_render__$b._withStripped = true;

  /* style */
  var __vue_inject_styles__$b = undefined;
  /* scoped */
  var __vue_scope_id__$b = undefined;
  /* module identifier */
  var __vue_module_identifier__$b = undefined;
  /* functional template */
  var __vue_is_functional_template__$b = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$b = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$b, staticRenderFns: __vue_staticRenderFns__$b },
    __vue_inject_styles__$b,
    __vue_script__$b,
    __vue_scope_id__$b,
    __vue_is_functional_template__$b,
    __vue_module_identifier__$b,
    false,
    undefined,
    undefined,
    undefined
  );

var script$a = {
    name: 'FormSelectOptionsAttrEditor',
    components: {},
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    computed: {
        optionAttributeList() {
            var optionList = [{
                code: 'disabled',
                label: this.$t('禁用')
            }, {
                code: 'hidden',
                label: this.$t('隐藏')
            }, {
                code: 'clearable',
                label: this.$t('可清除')
            }, {
                code: 'multiple',
                label: this.$t('多选')
            }, {
                code: 'showSearch',
                label: this.$t('可搜索')
            }, {
                code: 'searchCreate',
                label: this.$t('搜索时创建条目')
            }, {
                code: 'editStatusHidden',
                label: this.$t('编辑表单时隐藏')
            }, {
                code: 'editStatusDisabled',
                label: this.$t('编辑表单时禁用')
            }];
            return optionList.filter(item => this.editorInfo.allowField && this.editorInfo.allowField.includes(item.code));
        }
    },
    methods: {
        handleChangeAttr(value, option) {
            if (!option.code) return;
            this.updateSelectConfigByField(option.code, value);
        }
    }
};

/* script */ var __vue_script__$a = script$a;
/* template */
var __vue_render__$a = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("操作属性") } },
    _vm._l(_vm.optionAttributeList, function(item) {
      return _c(
        "div",
        { key: item.code, staticClass: "option-attribute" },
        [
          _c("div", [_vm._v(_vm._s(item.label))]),
          _vm._v(" "),
          _c("a-switch", {
            attrs: {
              checked: _vm.getSelectConfigByField(item.code),
              size: "small"
            },
            on: {
              change: function(e) {
                return _vm.handleChangeAttr(e, item)
              }
            }
          })
        ],
        1
      )
    }),
    0
  )
};
var __vue_staticRenderFns__$a = [];
__vue_render__$a._withStripped = true;

  /* style */
  var __vue_inject_styles__$a = undefined;
  /* scoped */
  var __vue_scope_id__$a = "data-v-3f4234bb";
  /* module identifier */
  var __vue_module_identifier__$a = undefined;
  /* functional template */
  var __vue_is_functional_template__$a = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$a = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$a, staticRenderFns: __vue_staticRenderFns__$a },
    __vue_inject_styles__$a,
    __vue_script__$a,
    __vue_scope_id__$a,
    __vue_is_functional_template__$a,
    __vue_module_identifier__$a,
    false,
    undefined,
    undefined,
    undefined
  );

var script$9 = {
    name: 'FormAreaIsChinaEditor',
    mixins: [editorComponentMixin],
    props: {},
    computed: {},
    methods: {
        handleChangeSelectCountries(e) {
            this.updateSelectConfigByField('bindNationComponent', e.target.value);
        }
    }
};

/* script */ var __vue_script__$9 = script$9;
/* template */
var __vue_render__$9 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("中国地区") } },
    [
      _c("a-switch", {
        attrs: { placeholder: "请输入", size: "small" },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      }),
      _vm._v(" "),
      _c("a-input", {
        attrs: {
          placeholder: _vm.$t("请选择国家字段"),
          value: _vm.getSelectConfigByField("bindNationComponent")
        },
        on: { change: _vm.handleChangeSelectCountries }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$9 = [];
__vue_render__$9._withStripped = true;

  /* style */
  var __vue_inject_styles__$9 = undefined;
  /* scoped */
  var __vue_scope_id__$9 = undefined;
  /* module identifier */
  var __vue_module_identifier__$9 = undefined;
  /* functional template */
  var __vue_is_functional_template__$9 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$9 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$9, staticRenderFns: __vue_staticRenderFns__$9 },
    __vue_inject_styles__$9,
    __vue_script__$9,
    __vue_scope_id__$9,
    __vue_is_functional_template__$9,
    __vue_module_identifier__$9,
    false,
    undefined,
    undefined,
    undefined
  );

var script$8 = {
    name: 'YlyRuleOperationHeader',
    props: {
        alreadyBindFieldComponentsList: {
            type: Array,
            default() {
                return [];
            }
        }
    },
    data() {
        return {
            operatorSymbolList: [{
                value: '+',
                label: '+'
            }, {
                value: '-',
                label: '-'
            }, {
                value: '*',
                label: '*'
            }, {
                value: '/',
                label: '/'
            }],
            functionOptionList: [{
                value: 'MAX',
                label: 'MAX',
                paramsLength: 2
            }, {
                value: 'currentDate',
                label: '当前时间',
                paramsLength: 0
            }, {
                value: 'IF',
                label: 'IF',
                paramsLength: 2
            }]
        };
    },
    mounted() {},
    methods: {
        handleAddRule(type, config) {
            if (!type) return;
            let ruleConfig = {
                ruleType: type,
                value: '',
                model: ''
            };
            if (type === 'COMPONENT') {
                ruleConfig.model = config.key;
                ruleConfig.value = config.key;
            } else if (type === 'OPERATION') {
                ruleConfig.value = config.key;
            } else if (type === 'FUNCTION') {
                ruleConfig.params = [];
            }
            this.$emit('addRuleItem', ruleConfig);
        }
    }
};

/* script */ var __vue_script__$8 = script$8;

/* template */
var __vue_render__$8 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "rule=-operation-header" },
    [
      _c(
        "a-dropdown",
        [
          _c(
            "a-menu",
            {
              attrs: { slot: "overlay" },
              on: {
                click: function(e) {
                  return _vm.handleAddRule("COMPONENT", e)
                }
              },
              slot: "overlay"
            },
            _vm._l(_vm.alreadyBindFieldComponentsList, function(item) {
              return _c("a-menu-item", { key: item.model }, [
                _vm._v("\n      " + _vm._s(item.label) + "\n      ")
              ])
            }),
            1
          ),
          _vm._v(" "),
          _c(
            "a-button",
            { staticStyle: { "margin-left": "8px" } },
            [_vm._v(" 表单组件 "), _c("a-icon", { attrs: { type: "down" } })],
            1
          )
        ],
        1
      ),
      _vm._v(" "),
      _c(
        "a-dropdown",
        [
          _c(
            "a-menu",
            {
              attrs: { slot: "overlay" },
              on: {
                click: function(e) {
                  return _vm.handleAddRule("OPERATION", e)
                }
              },
              slot: "overlay"
            },
            _vm._l(_vm.operatorSymbolList, function(item) {
              return _c("a-menu-item", { key: item.value }, [
                _vm._v("\n      " + _vm._s(item.label) + "\n      ")
              ])
            }),
            1
          ),
          _vm._v(" "),
          _c(
            "a-button",
            { staticStyle: { "margin-left": "8px" } },
            [_vm._v(" 运算符号 "), _c("a-icon", { attrs: { type: "down" } })],
            1
          )
        ],
        1
      ),
      _vm._v(" "),
      _c(
        "a-dropdown",
        [
          _c(
            "a-menu",
            {
              attrs: { slot: "overlay" },
              on: {
                click: function(e) {
                  return _vm.handleAddRule("FUNCTION", e)
                }
              },
              slot: "overlay"
            },
            _vm._l(_vm.functionOptionList, function(item) {
              return _c("a-menu-item", { key: item.value }, [
                _vm._v("\n      " + _vm._s(item.label) + "\n      ")
              ])
            }),
            1
          ),
          _vm._v(" "),
          _c(
            "a-button",
            { staticStyle: { "margin-left": "8px" } },
            [_vm._v(" 执行函数 "), _c("a-icon", { attrs: { type: "down" } })],
            1
          )
        ],
        1
      ),
      _vm._v(" "),
      _c(
        "a-button",
        {
          staticStyle: { "margin-left": "8px" },
          on: {
            click: function() {
              return _vm.handleAddRule("STATIC_TEXT")
            }
          }
        },
        [_vm._v(" 静态文本 ")]
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$8 = [];
__vue_render__$8._withStripped = true;

  /* style */
  var __vue_inject_styles__$8 = undefined;
  /* scoped */
  var __vue_scope_id__$8 = undefined;
  /* module identifier */
  var __vue_module_identifier__$8 = undefined;
  /* functional template */
  var __vue_is_functional_template__$8 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$8 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$8, staticRenderFns: __vue_staticRenderFns__$8 },
    __vue_inject_styles__$8,
    __vue_script__$8,
    __vue_scope_id__$8,
    __vue_is_functional_template__$8,
    __vue_module_identifier__$8,
    false,
    undefined,
    undefined,
    undefined
  );

var javascript = {exports: {}};

var codemirror = {exports: {}};

var hasRequiredCodemirror;
function requireCodemirror() {
    if (hasRequiredCodemirror) return codemirror.exports;
    hasRequiredCodemirror = 1;
    (function (module, exports) {
        (function (global, factory) {
            module.exports = factory() ;
        })(commonjsGlobal, function () {
            var userAgent = navigator.userAgent;
            var platform = navigator.platform;
            var gecko = (/gecko\/\d/i).test(userAgent);
            var ie_upto10 = (/MSIE \d/).test(userAgent);
            var ie_11up = (/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/).exec(userAgent);
            var edge = (/Edge\/(\d+)/).exec(userAgent);
            var ie = ie_upto10 || ie_11up || edge;
            var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);
            var webkit = !edge && (/WebKit\//).test(userAgent);
            var qtwebkit = webkit && (/Qt\/\d+\.\d+/).test(userAgent);
            var chrome = !edge && (/Chrome\/(\d+)/).exec(userAgent);
            var chrome_version = chrome && +chrome[1];
            var presto = (/Opera\//).test(userAgent);
            var safari = (/Apple Computer/).test(navigator.vendor);
            var mac_geMountainLion = (/Mac OS X 1\d\D([8-9]|\d\d)\D/).test(userAgent);
            var phantom = (/PhantomJS/).test(userAgent);
            var ios = safari && ((/Mobile\/\w+/).test(userAgent) || navigator.maxTouchPoints > 2);
            var android = (/Android/).test(userAgent);
            var mobile = ios || android || (/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i).test(userAgent);
            var mac = ios || (/Mac/).test(platform);
            var chromeOS = (/\bCrOS\b/).test(userAgent);
            var windows = (/win/i).test(platform);
            var presto_version = presto && userAgent.match(/Version\/(\d*\.\d*)/);
            if (presto_version) {
                presto_version = Number(presto_version[1]);
            }
            if (presto_version && presto_version >= 15) {
                presto = false;
                webkit = true;
            }
            var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
            var captureRightClick = gecko || ie && ie_version >= 9;
            function classTest(cls) {
                return new RegExp("(^|\\s)" + cls + "(?:$|\\s)\\s*");
            }
            var rmClass = function (node, cls) {
                var current = node.className;
                var match = classTest(cls).exec(current);
                if (match) {
                    var after = current.slice(match.index + match[0].length);
                    node.className = current.slice(0, match.index) + (after ? match[1] + after : "");
                }
            };
            function removeChildren(e) {
                for (var count = e.childNodes.length; count > 0; --count) {
                    e.removeChild(e.firstChild);
                }
                return e;
            }
            function removeChildrenAndAdd(parent, e) {
                return removeChildren(parent).appendChild(e);
            }
            function elt(tag, content, className, style) {
                var e = document.createElement(tag);
                if (className) {
                    e.className = className;
                }
                if (style) {
                    e.style.cssText = style;
                }
                if (typeof content == "string") {
                    e.appendChild(document.createTextNode(content));
                } else if (content) {
                    for (var i = 0; i < content.length; ++i) {
                        e.appendChild(content[i]);
                    }
                }
                return e;
            }
            function eltP(tag, content, className, style) {
                var e = elt(tag, content, className, style);
                e.setAttribute("role", "presentation");
                return e;
            }
            var range;
            if (document.createRange) {
                range = function (node, start, end, endNode) {
                    var r = document.createRange();
                    r.setEnd(endNode || node, end);
                    r.setStart(node, start);
                    return r;
                };
            } else {
                range = function (node, start, end) {
                    var r = document.body.createTextRange();
                    try {
                        r.moveToElementText(node.parentNode);
                    } catch (e) {
                        return r;
                    }
                    r.collapse(true);
                    r.moveEnd("character", end);
                    r.moveStart("character", start);
                    return r;
                };
            }
            function contains(parent, child) {
                if (child.nodeType == 3) {
                    child = child.parentNode;
                }
                if (parent.contains) {
                    return parent.contains(child);
                }
                do {
                    if (child.nodeType == 11) {
                        child = child.host;
                    }
                    if (child == parent) {
                        return true;
                    }
                } while (child = child.parentNode);
            }
            function activeElt(rootNode) {
                var doc = rootNode.ownerDocument || rootNode;
                var activeElement;
                try {
                    activeElement = rootNode.activeElement;
                } catch (e) {
                    activeElement = doc.body || null;
                }
                while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement) {
                    activeElement = activeElement.shadowRoot.activeElement;
                }
                return activeElement;
            }
            function addClass(node, cls) {
                var current = node.className;
                if (!classTest(cls).test(current)) {
                    node.className += (current ? " " : "") + cls;
                }
            }
            function joinClasses(a, b) {
                var as = a.split(" ");
                for (var i = 0; i < as.length; i++) {
                    if (as[i] && !classTest(as[i]).test(b)) {
                        b += " " + as[i];
                    }
                }
                return b;
            }
            var selectInput = function (node) {
                node.select();
            };
            if (ios) {
                selectInput = function (node) {
                    node.selectionStart = 0;
                    node.selectionEnd = node.value.length;
                };
            } else if (ie) {
                selectInput = function (node) {
                    try {
                        node.select();
                    } catch (_e) {}
                };
            }
            function doc(cm) {
                return cm.display.wrapper.ownerDocument;
            }
            function root(cm) {
                return rootNode(cm.display.wrapper);
            }
            function rootNode(element) {
                return element.getRootNode ? element.getRootNode() : element.ownerDocument;
            }
            function win(cm) {
                return doc(cm).defaultView;
            }
            function bind(f) {
                var args = Array.prototype.slice.call(arguments, 1);
                return function () {
                    return f.apply(null, args);
                };
            }
            function copyObj(obj, target, overwrite) {
                if (!target) {
                    target = {};
                }
                for (var prop in obj) {
                    if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop))) {
                        target[prop] = obj[prop];
                    }
                }
                return target;
            }
            function countColumn(string, end, tabSize, startIndex, startValue) {
                if (end == null) {
                    end = string.search(/[^\s\u00a0]/);
                    if (end == -1) {
                        end = string.length;
                    }
                }
                for (var i = startIndex || 0, n = startValue || 0; ; ) {
                    var nextTab = string.indexOf("\t", i);
                    if (nextTab < 0 || nextTab >= end) {
                        return n + (end - i);
                    }
                    n += nextTab - i;
                    n += tabSize - n % tabSize;
                    i = nextTab + 1;
                }
            }
            var Delayed = function () {
                this.id = null;
                this.f = null;
                this.time = 0;
                this.handler = bind(this.onTimeout, this);
            };
            Delayed.prototype.onTimeout = function (self) {
                self.id = 0;
                if (self.time <= +new Date()) {
                    self.f();
                } else {
                    setTimeout(self.handler, self.time - +new Date());
                }
            };
            Delayed.prototype.set = function (ms, f) {
                this.f = f;
                var time = +new Date() + ms;
                if (!this.id || time < this.time) {
                    clearTimeout(this.id);
                    this.id = setTimeout(this.handler, ms);
                    this.time = time;
                }
            };
            function indexOf(array, elt) {
                for (var i = 0; i < array.length; ++i) {
                    if (array[i] == elt) {
                        return i;
                    }
                }
                return -1;
            }
            var scrollerGap = 50;
            var Pass = {
                toString: function () {
                    return "CodeMirror.Pass";
                }
            };
            var sel_dontScroll = {
                scroll: false
            }, sel_mouse = {
                origin: "*mouse"
            }, sel_move = {
                origin: "+move"
            };
            function findColumn(string, goal, tabSize) {
                for (var pos = 0, col = 0; ; ) {
                    var nextTab = string.indexOf("\t", pos);
                    if (nextTab == -1) {
                        nextTab = string.length;
                    }
                    var skipped = nextTab - pos;
                    if (nextTab == string.length || col + skipped >= goal) {
                        return pos + Math.min(skipped, goal - col);
                    }
                    col += nextTab - pos;
                    col += tabSize - col % tabSize;
                    pos = nextTab + 1;
                    if (col >= goal) {
                        return pos;
                    }
                }
            }
            var spaceStrs = [""];
            function spaceStr(n) {
                while (spaceStrs.length <= n) {
                    spaceStrs.push(lst(spaceStrs) + " ");
                }
                return spaceStrs[n];
            }
            function lst(arr) {
                return arr[arr.length - 1];
            }
            function map(array, f) {
                var out = [];
                for (var i = 0; i < array.length; i++) {
                    out[i] = f(array[i], i);
                }
                return out;
            }
            function insertSorted(array, value, score) {
                var pos = 0, priority = score(value);
                while (pos < array.length && score(array[pos]) <= priority) {
                    pos++;
                }
                array.splice(pos, 0, value);
            }
            function nothing() {}
            function createObj(base, props) {
                var inst;
                if (Object.create) {
                    inst = Object.create(base);
                } else {
                    nothing.prototype = base;
                    inst = new nothing();
                }
                if (props) {
                    copyObj(props, inst);
                }
                return inst;
            }
            var nonASCIISingleCaseWordChar = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;
            function isWordCharBasic(ch) {
                return (/\w/).test(ch) || ch > "\x80" && (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));
            }
            function isWordChar(ch, helper) {
                if (!helper) {
                    return isWordCharBasic(ch);
                }
                if (helper.source.indexOf("\\w") > -1 && isWordCharBasic(ch)) {
                    return true;
                }
                return helper.test(ch);
            }
            function isEmpty(obj) {
                for (var n in obj) {
                    if (obj.hasOwnProperty(n) && obj[n]) {
                        return false;
                    }
                }
                return true;
            }
            var extendingChars = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
            function isExtendingChar(ch) {
                return ch.charCodeAt(0) >= 768 && extendingChars.test(ch);
            }
            function skipExtendingChars(str, pos, dir) {
                while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) {
                    pos += dir;
                }
                return pos;
            }
            function findFirst(pred, from, to) {
                var dir = from > to ? -1 : 1;
                for (; ; ) {
                    if (from == to) {
                        return from;
                    }
                    var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);
                    if (mid == from) {
                        return pred(mid) ? from : to;
                    }
                    if (pred(mid)) {
                        to = mid;
                    } else {
                        from = mid + dir;
                    }
                }
            }
            function iterateBidiSections(order, from, to, f) {
                if (!order) {
                    return f(from, to, "ltr", 0);
                }
                var found = false;
                for (var i = 0; i < order.length; ++i) {
                    var part = order[i];
                    if (part.from < to && part.to > from || from == to && part.to == from) {
                        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? "rtl" : "ltr", i);
                        found = true;
                    }
                }
                if (!found) {
                    f(from, to, "ltr");
                }
            }
            var bidiOther = null;
            function getBidiPartAt(order, ch, sticky) {
                var found;
                bidiOther = null;
                for (var i = 0; i < order.length; ++i) {
                    var cur = order[i];
                    if (cur.from < ch && cur.to > ch) {
                        return i;
                    }
                    if (cur.to == ch) {
                        if (cur.from != cur.to && sticky == "before") {
                            found = i;
                        } else {
                            bidiOther = i;
                        }
                    }
                    if (cur.from == ch) {
                        if (cur.from != cur.to && sticky != "before") {
                            found = i;
                        } else {
                            bidiOther = i;
                        }
                    }
                }
                return found != null ? found : bidiOther;
            }
            var bidiOrdering = (function () {
                var lowTypes = "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN";
                var arabicTypes = "nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";
                function charType(code) {
                    if (code <= 0xf7) {
                        return lowTypes.charAt(code);
                    } else if (0x590 <= code && code <= 0x5f4) {
                        return "R";
                    } else if (0x600 <= code && code <= 0x6f9) {
                        return arabicTypes.charAt(code - 0x600);
                    } else if (0x6ee <= code && code <= 0x8ac) {
                        return "r";
                    } else if (0x2000 <= code && code <= 0x200b) {
                        return "w";
                    } else if (code == 0x200c) {
                        return "b";
                    } else {
                        return "L";
                    }
                }
                var bidiRE = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
                var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;
                function BidiSpan(level, from, to) {
                    this.level = level;
                    this.from = from;
                    this.to = to;
                }
                return function (str, direction) {
                    var outerType = direction == "ltr" ? "L" : "R";
                    if (str.length == 0 || direction == "ltr" && !bidiRE.test(str)) {
                        return false;
                    }
                    var len = str.length, types = [];
                    for (var i = 0; i < len; ++i) {
                        types.push(charType(str.charCodeAt(i)));
                    }
                    for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {
                        var type = types[i$1];
                        if (type == "m") {
                            types[i$1] = prev;
                        } else {
                            prev = type;
                        }
                    }
                    for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {
                        var type$1 = types[i$2];
                        if (type$1 == "1" && cur == "r") {
                            types[i$2] = "n";
                        } else if (isStrong.test(type$1)) {
                            cur = type$1;
                            if (type$1 == "r") {
                                types[i$2] = "R";
                            }
                        }
                    }
                    for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {
                        var type$2 = types[i$3];
                        if (type$2 == "+" && prev$1 == "1" && types[i$3 + 1] == "1") {
                            types[i$3] = "1";
                        } else if (type$2 == "," && prev$1 == types[i$3 + 1] && (prev$1 == "1" || prev$1 == "n")) {
                            types[i$3] = prev$1;
                        }
                        prev$1 = type$2;
                    }
                    for (var i$4 = 0; i$4 < len; ++i$4) {
                        var type$3 = types[i$4];
                        if (type$3 == ",") {
                            types[i$4] = "N";
                        } else if (type$3 == "%") {
                            var end = void 0;
                            for (end = i$4 + 1; end < len && types[end] == "%"; ++end) {}
                            var replace = i$4 && types[i$4 - 1] == "!" || end < len && types[end] == "1" ? "1" : "N";
                            for (var j = i$4; j < end; ++j) {
                                types[j] = replace;
                            }
                            i$4 = end - 1;
                        }
                    }
                    for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {
                        var type$4 = types[i$5];
                        if (cur$1 == "L" && type$4 == "1") {
                            types[i$5] = "L";
                        } else if (isStrong.test(type$4)) {
                            cur$1 = type$4;
                        }
                    }
                    for (var i$6 = 0; i$6 < len; ++i$6) {
                        if (isNeutral.test(types[i$6])) {
                            var end$1 = void 0;
                            for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}
                            var before = (i$6 ? types[i$6 - 1] : outerType) == "L";
                            var after = (end$1 < len ? types[end$1] : outerType) == "L";
                            var replace$1 = before == after ? before ? "L" : "R" : outerType;
                            for (var j$1 = i$6; j$1 < end$1; ++j$1) {
                                types[j$1] = replace$1;
                            }
                            i$6 = end$1 - 1;
                        }
                    }
                    var order = [], m;
                    for (var i$7 = 0; i$7 < len; ) {
                        if (countsAsLeft.test(types[i$7])) {
                            var start = i$7;
                            for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}
                            order.push(new BidiSpan(0, start, i$7));
                        } else {
                            var pos = i$7, at = order.length, isRTL = direction == "rtl" ? 1 : 0;
                            for (++i$7; i$7 < len && types[i$7] != "L"; ++i$7) {}
                            for (var j$2 = pos; j$2 < i$7; ) {
                                if (countsAsNum.test(types[j$2])) {
                                    if (pos < j$2) {
                                        order.splice(at, 0, new BidiSpan(1, pos, j$2));
                                        at += isRTL;
                                    }
                                    var nstart = j$2;
                                    for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}
                                    order.splice(at, 0, new BidiSpan(2, nstart, j$2));
                                    at += isRTL;
                                    pos = j$2;
                                } else {
                                    ++j$2;
                                }
                            }
                            if (pos < i$7) {
                                order.splice(at, 0, new BidiSpan(1, pos, i$7));
                            }
                        }
                    }
                    if (direction == "ltr") {
                        if (order[0].level == 1 && (m = str.match(/^\s+/))) {
                            order[0].from = m[0].length;
                            order.unshift(new BidiSpan(0, 0, m[0].length));
                        }
                        if (lst(order).level == 1 && (m = str.match(/\s+$/))) {
                            lst(order).to -= m[0].length;
                            order.push(new BidiSpan(0, len - m[0].length, len));
                        }
                    }
                    return direction == "rtl" ? order.reverse() : order;
                };
            })();
            function getOrder(line, direction) {
                var order = line.order;
                if (order == null) {
                    order = line.order = bidiOrdering(line.text, direction);
                }
                return order;
            }
            var noHandlers = [];
            var on = function (emitter, type, f) {
                if (emitter.addEventListener) {
                    emitter.addEventListener(type, f, false);
                } else if (emitter.attachEvent) {
                    emitter.attachEvent("on" + type, f);
                } else {
                    var map = emitter._handlers || (emitter._handlers = {});
                    map[type] = (map[type] || noHandlers).concat(f);
                }
            };
            function getHandlers(emitter, type) {
                return emitter._handlers && emitter._handlers[type] || noHandlers;
            }
            function off(emitter, type, f) {
                if (emitter.removeEventListener) {
                    emitter.removeEventListener(type, f, false);
                } else if (emitter.detachEvent) {
                    emitter.detachEvent("on" + type, f);
                } else {
                    var map = emitter._handlers, arr = map && map[type];
                    if (arr) {
                        var index = indexOf(arr, f);
                        if (index > -1) {
                            map[type] = arr.slice(0, index).concat(arr.slice(index + 1));
                        }
                    }
                }
            }
            function signal(emitter, type) {
                var handlers = getHandlers(emitter, type);
                if (!handlers.length) {
                    return;
                }
                var args = Array.prototype.slice.call(arguments, 2);
                for (var i = 0; i < handlers.length; ++i) {
                    handlers[i].apply(null, args);
                }
            }
            function signalDOMEvent(cm, e, override) {
                if (typeof e == "string") {
                    e = {
                        type: e,
                        preventDefault: function () {
                            this.defaultPrevented = true;
                        }
                    };
                }
                signal(cm, override || e.type, cm, e);
                return e_defaultPrevented(e) || e.codemirrorIgnore;
            }
            function signalCursorActivity(cm) {
                var arr = cm._handlers && cm._handlers.cursorActivity;
                if (!arr) {
                    return;
                }
                var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);
                for (var i = 0; i < arr.length; ++i) {
                    if (indexOf(set, arr[i]) == -1) {
                        set.push(arr[i]);
                    }
                }
            }
            function hasHandler(emitter, type) {
                return getHandlers(emitter, type).length > 0;
            }
            function eventMixin(ctor) {
                ctor.prototype.on = function (type, f) {
                    on(this, type, f);
                };
                ctor.prototype.off = function (type, f) {
                    off(this, type, f);
                };
            }
            function e_preventDefault(e) {
                if (e.preventDefault) {
                    e.preventDefault();
                } else {
                    e.returnValue = false;
                }
            }
            function e_stopPropagation(e) {
                if (e.stopPropagation) {
                    e.stopPropagation();
                } else {
                    e.cancelBubble = true;
                }
            }
            function e_defaultPrevented(e) {
                return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false;
            }
            function e_stop(e) {
                e_preventDefault(e);
                e_stopPropagation(e);
            }
            function e_target(e) {
                return e.target || e.srcElement;
            }
            function e_button(e) {
                var b = e.which;
                if (b == null) {
                    if (e.button & 1) {
                        b = 1;
                    } else if (e.button & 2) {
                        b = 3;
                    } else if (e.button & 4) {
                        b = 2;
                    }
                }
                if (mac && e.ctrlKey && b == 1) {
                    b = 3;
                }
                return b;
            }
            var dragAndDrop = (function () {
                if (ie && ie_version < 9) {
                    return false;
                }
                var div = elt('div');
                return ("draggable" in div) || ("dragDrop" in div);
            })();
            var zwspSupported;
            function zeroWidthElement(measure) {
                if (zwspSupported == null) {
                    var test = elt("span", "\u200b");
                    removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
                    if (measure.firstChild.offsetHeight != 0) {
                        zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);
                    }
                }
                var node = zwspSupported ? elt("span", "\u200b") : elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
                node.setAttribute("cm-text", "");
                return node;
            }
            var badBidiRects;
            function hasBadBidiRects(measure) {
                if (badBidiRects != null) {
                    return badBidiRects;
                }
                var txt = removeChildrenAndAdd(measure, document.createTextNode("A\u062eA"));
                var r0 = range(txt, 0, 1).getBoundingClientRect();
                var r1 = range(txt, 1, 2).getBoundingClientRect();
                removeChildren(measure);
                if (!r0 || r0.left == r0.right) {
                    return false;
                }
                return badBidiRects = r1.right - r0.right < 3;
            }
            var splitLinesAuto = ("\n\nb").split(/\n/).length != 3 ? function (string) {
                var pos = 0, result = [], l = string.length;
                while (pos <= l) {
                    var nl = string.indexOf("\n", pos);
                    if (nl == -1) {
                        nl = string.length;
                    }
                    var line = string.slice(pos, string.charAt(nl - 1) == "\r" ? nl - 1 : nl);
                    var rt = line.indexOf("\r");
                    if (rt != -1) {
                        result.push(line.slice(0, rt));
                        pos += rt + 1;
                    } else {
                        result.push(line);
                        pos = nl + 1;
                    }
                }
                return result;
            } : function (string) {
                return string.split(/\r\n?|\n/);
            };
            var hasSelection = window.getSelection ? function (te) {
                try {
                    return te.selectionStart != te.selectionEnd;
                } catch (e) {
                    return false;
                }
            } : function (te) {
                var range;
                try {
                    range = te.ownerDocument.selection.createRange();
                } catch (e) {}
                if (!range || range.parentElement() != te) {
                    return false;
                }
                return range.compareEndPoints("StartToEnd", range) != 0;
            };
            var hasCopyEvent = (function () {
                var e = elt("div");
                if (("oncopy" in e)) {
                    return true;
                }
                e.setAttribute("oncopy", "return;");
                return typeof e.oncopy == "function";
            })();
            var badZoomedRects = null;
            function hasBadZoomedRects(measure) {
                if (badZoomedRects != null) {
                    return badZoomedRects;
                }
                var node = removeChildrenAndAdd(measure, elt("span", "x"));
                var normal = node.getBoundingClientRect();
                var fromRange = range(node, 0, 1).getBoundingClientRect();
                return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;
            }
            var modes = {}, mimeModes = {};
            function defineMode(name, mode) {
                if (arguments.length > 2) {
                    mode.dependencies = Array.prototype.slice.call(arguments, 2);
                }
                modes[name] = mode;
            }
            function defineMIME(mime, spec) {
                mimeModes[mime] = spec;
            }
            function resolveMode(spec) {
                if (typeof spec == "string" && mimeModes.hasOwnProperty(spec)) {
                    spec = mimeModes[spec];
                } else if (spec && typeof spec.name == "string" && mimeModes.hasOwnProperty(spec.name)) {
                    var found = mimeModes[spec.name];
                    if (typeof found == "string") {
                        found = {
                            name: found
                        };
                    }
                    spec = createObj(found, spec);
                    spec.name = found.name;
                } else if (typeof spec == "string" && (/^[\w\-]+\/[\w\-]+\+xml$/).test(spec)) {
                    return resolveMode("application/xml");
                } else if (typeof spec == "string" && (/^[\w\-]+\/[\w\-]+\+json$/).test(spec)) {
                    return resolveMode("application/json");
                }
                if (typeof spec == "string") {
                    return {
                        name: spec
                    };
                } else {
                    return spec || ({
                        name: "null"
                    });
                }
            }
            function getMode(options, spec) {
                spec = resolveMode(spec);
                var mfactory = modes[spec.name];
                if (!mfactory) {
                    return getMode(options, "text/plain");
                }
                var modeObj = mfactory(options, spec);
                if (modeExtensions.hasOwnProperty(spec.name)) {
                    var exts = modeExtensions[spec.name];
                    for (var prop in exts) {
                        if (!exts.hasOwnProperty(prop)) {
                            continue;
                        }
                        if (modeObj.hasOwnProperty(prop)) {
                            modeObj["_" + prop] = modeObj[prop];
                        }
                        modeObj[prop] = exts[prop];
                    }
                }
                modeObj.name = spec.name;
                if (spec.helperType) {
                    modeObj.helperType = spec.helperType;
                }
                if (spec.modeProps) {
                    for (var prop$1 in spec.modeProps) {
                        modeObj[prop$1] = spec.modeProps[prop$1];
                    }
                }
                return modeObj;
            }
            var modeExtensions = {};
            function extendMode(mode, properties) {
                var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : modeExtensions[mode] = {};
                copyObj(properties, exts);
            }
            function copyState(mode, state) {
                if (state === true) {
                    return state;
                }
                if (mode.copyState) {
                    return mode.copyState(state);
                }
                var nstate = {};
                for (var n in state) {
                    var val = state[n];
                    if (val instanceof Array) {
                        val = val.concat([]);
                    }
                    nstate[n] = val;
                }
                return nstate;
            }
            function innerMode(mode, state) {
                var info;
                while (mode.innerMode) {
                    info = mode.innerMode(state);
                    if (!info || info.mode == mode) {
                        break;
                    }
                    state = info.state;
                    mode = info.mode;
                }
                return info || ({
                    mode: mode,
                    state: state
                });
            }
            function startState(mode, a1, a2) {
                return mode.startState ? mode.startState(a1, a2) : true;
            }
            var StringStream = function (string, tabSize, lineOracle) {
                this.pos = this.start = 0;
                this.string = string;
                this.tabSize = tabSize || 8;
                this.lastColumnPos = this.lastColumnValue = 0;
                this.lineStart = 0;
                this.lineOracle = lineOracle;
            };
            StringStream.prototype.eol = function () {
                return this.pos >= this.string.length;
            };
            StringStream.prototype.sol = function () {
                return this.pos == this.lineStart;
            };
            StringStream.prototype.peek = function () {
                return this.string.charAt(this.pos) || undefined;
            };
            StringStream.prototype.next = function () {
                if (this.pos < this.string.length) {
                    return this.string.charAt(this.pos++);
                }
            };
            StringStream.prototype.eat = function (match) {
                var ch = this.string.charAt(this.pos);
                var ok;
                if (typeof match == "string") {
                    ok = ch == match;
                } else {
                    ok = ch && (match.test ? match.test(ch) : match(ch));
                }
                if (ok) {
                    ++this.pos;
                    return ch;
                }
            };
            StringStream.prototype.eatWhile = function (match) {
                var start = this.pos;
                while (this.eat(match)) {}
                return this.pos > start;
            };
            StringStream.prototype.eatSpace = function () {
                var start = this.pos;
                while ((/[\s\u00a0]/).test(this.string.charAt(this.pos))) {
                    ++this.pos;
                }
                return this.pos > start;
            };
            StringStream.prototype.skipToEnd = function () {
                this.pos = this.string.length;
            };
            StringStream.prototype.skipTo = function (ch) {
                var found = this.string.indexOf(ch, this.pos);
                if (found > -1) {
                    this.pos = found;
                    return true;
                }
            };
            StringStream.prototype.backUp = function (n) {
                this.pos -= n;
            };
            StringStream.prototype.column = function () {
                if (this.lastColumnPos < this.start) {
                    this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);
                    this.lastColumnPos = this.start;
                }
                return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
            };
            StringStream.prototype.indentation = function () {
                return countColumn(this.string, null, this.tabSize) - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0);
            };
            StringStream.prototype.match = function (pattern, consume, caseInsensitive) {
                if (typeof pattern == "string") {
                    var cased = function (str) {
                        return caseInsensitive ? str.toLowerCase() : str;
                    };
                    var substr = this.string.substr(this.pos, pattern.length);
                    if (cased(substr) == cased(pattern)) {
                        if (consume !== false) {
                            this.pos += pattern.length;
                        }
                        return true;
                    }
                } else {
                    var match = this.string.slice(this.pos).match(pattern);
                    if (match && match.index > 0) {
                        return null;
                    }
                    if (match && consume !== false) {
                        this.pos += match[0].length;
                    }
                    return match;
                }
            };
            StringStream.prototype.current = function () {
                return this.string.slice(this.start, this.pos);
            };
            StringStream.prototype.hideFirstChars = function (n, inner) {
                this.lineStart += n;
                try {
                    return inner();
                } finally {
                    this.lineStart -= n;
                }
            };
            StringStream.prototype.lookAhead = function (n) {
                var oracle = this.lineOracle;
                return oracle && oracle.lookAhead(n);
            };
            StringStream.prototype.baseToken = function () {
                var oracle = this.lineOracle;
                return oracle && oracle.baseToken(this.pos);
            };
            function getLine(doc, n) {
                n -= doc.first;
                if (n < 0 || n >= doc.size) {
                    throw new Error("There is no line " + (n + doc.first) + " in the document.");
                }
                var chunk = doc;
                while (!chunk.lines) {
                    for (var i = 0; ; ++i) {
                        var child = chunk.children[i], sz = child.chunkSize();
                        if (n < sz) {
                            chunk = child;
                            break;
                        }
                        n -= sz;
                    }
                }
                return chunk.lines[n];
            }
            function getBetween(doc, start, end) {
                var out = [], n = start.line;
                doc.iter(start.line, end.line + 1, function (line) {
                    var text = line.text;
                    if (n == end.line) {
                        text = text.slice(0, end.ch);
                    }
                    if (n == start.line) {
                        text = text.slice(start.ch);
                    }
                    out.push(text);
                    ++n;
                });
                return out;
            }
            function getLines(doc, from, to) {
                var out = [];
                doc.iter(from, to, function (line) {
                    out.push(line.text);
                });
                return out;
            }
            function updateLineHeight(line, height) {
                var diff = height - line.height;
                if (diff) {
                    for (var n = line; n; n = n.parent) {
                        n.height += diff;
                    }
                }
            }
            function lineNo(line) {
                if (line.parent == null) {
                    return null;
                }
                var cur = line.parent, no = indexOf(cur.lines, line);
                for (var chunk = cur.parent; chunk; (cur = chunk, chunk = chunk.parent)) {
                    for (var i = 0; ; ++i) {
                        if (chunk.children[i] == cur) {
                            break;
                        }
                        no += chunk.children[i].chunkSize();
                    }
                }
                return no + cur.first;
            }
            function lineAtHeight(chunk, h) {
                var n = chunk.first;
                outer: do {
                    for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {
                        var child = chunk.children[i$1], ch = child.height;
                        if (h < ch) {
                            chunk = child;
                            continue outer;
                        }
                        h -= ch;
                        n += child.chunkSize();
                    }
                    return n;
                } while (!chunk.lines);
                var i = 0;
                for (; i < chunk.lines.length; ++i) {
                    var line = chunk.lines[i], lh = line.height;
                    if (h < lh) {
                        break;
                    }
                    h -= lh;
                }
                return n + i;
            }
            function isLine(doc, l) {
                return l >= doc.first && l < doc.first + doc.size;
            }
            function lineNumberFor(options, i) {
                return String(options.lineNumberFormatter(i + options.firstLineNumber));
            }
            function Pos(line, ch, sticky) {
                if (sticky === void 0) sticky = null;
                if (!(this instanceof Pos)) {
                    return new Pos(line, ch, sticky);
                }
                this.line = line;
                this.ch = ch;
                this.sticky = sticky;
            }
            function cmp(a, b) {
                return a.line - b.line || a.ch - b.ch;
            }
            function equalCursorPos(a, b) {
                return a.sticky == b.sticky && cmp(a, b) == 0;
            }
            function copyPos(x) {
                return Pos(x.line, x.ch);
            }
            function maxPos(a, b) {
                return cmp(a, b) < 0 ? b : a;
            }
            function minPos(a, b) {
                return cmp(a, b) < 0 ? a : b;
            }
            function clipLine(doc, n) {
                return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1));
            }
            function clipPos(doc, pos) {
                if (pos.line < doc.first) {
                    return Pos(doc.first, 0);
                }
                var last = doc.first + doc.size - 1;
                if (pos.line > last) {
                    return Pos(last, getLine(doc, last).text.length);
                }
                return clipToLen(pos, getLine(doc, pos.line).text.length);
            }
            function clipToLen(pos, linelen) {
                var ch = pos.ch;
                if (ch == null || ch > linelen) {
                    return Pos(pos.line, linelen);
                } else if (ch < 0) {
                    return Pos(pos.line, 0);
                } else {
                    return pos;
                }
            }
            function clipPosArray(doc, array) {
                var out = [];
                for (var i = 0; i < array.length; i++) {
                    out[i] = clipPos(doc, array[i]);
                }
                return out;
            }
            var SavedContext = function (state, lookAhead) {
                this.state = state;
                this.lookAhead = lookAhead;
            };
            var Context = function (doc, state, line, lookAhead) {
                this.state = state;
                this.doc = doc;
                this.line = line;
                this.maxLookAhead = lookAhead || 0;
                this.baseTokens = null;
                this.baseTokenPos = 1;
            };
            Context.prototype.lookAhead = function (n) {
                var line = this.doc.getLine(this.line + n);
                if (line != null && n > this.maxLookAhead) {
                    this.maxLookAhead = n;
                }
                return line;
            };
            Context.prototype.baseToken = function (n) {
                if (!this.baseTokens) {
                    return null;
                }
                while (this.baseTokens[this.baseTokenPos] <= n) {
                    this.baseTokenPos += 2;
                }
                var type = this.baseTokens[this.baseTokenPos + 1];
                return {
                    type: type && type.replace(/( |^)overlay .*/, ""),
                    size: this.baseTokens[this.baseTokenPos] - n
                };
            };
            Context.prototype.nextLine = function () {
                this.line++;
                if (this.maxLookAhead > 0) {
                    this.maxLookAhead--;
                }
            };
            Context.fromSaved = function (doc, saved, line) {
                if (saved instanceof SavedContext) {
                    return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead);
                } else {
                    return new Context(doc, copyState(doc.mode, saved), line);
                }
            };
            Context.prototype.save = function (copy) {
                var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;
                return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state;
            };
            function highlightLine(cm, line, context, forceToEnd) {
                var st = [cm.state.modeGen], lineClasses = {};
                runMode(cm, line.text, cm.doc.mode, context, function (end, style) {
                    return st.push(end, style);
                }, lineClasses, forceToEnd);
                var state = context.state;
                var loop = function (o) {
                    context.baseTokens = st;
                    var overlay = cm.state.overlays[o], i = 1, at = 0;
                    context.state = true;
                    runMode(cm, line.text, overlay.mode, context, function (end, style) {
                        var start = i;
                        while (at < end) {
                            var i_end = st[i];
                            if (i_end > end) {
                                st.splice(i, 1, end, st[i + 1], i_end);
                            }
                            i += 2;
                            at = Math.min(end, i_end);
                        }
                        if (!style) {
                            return;
                        }
                        if (overlay.opaque) {
                            st.splice(start, i - start, end, "overlay " + style);
                            i = start + 2;
                        } else {
                            for (; start < i; start += 2) {
                                var cur = st[start + 1];
                                st[start + 1] = (cur ? cur + " " : "") + "overlay " + style;
                            }
                        }
                    }, lineClasses);
                    context.state = state;
                    context.baseTokens = null;
                    context.baseTokenPos = 1;
                };
                for (var o = 0; o < cm.state.overlays.length; ++o) loop(o);
                return {
                    styles: st,
                    classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null
                };
            }
            function getLineStyles(cm, line, updateFrontier) {
                if (!line.styles || line.styles[0] != cm.state.modeGen) {
                    var context = getContextBefore(cm, lineNo(line));
                    var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);
                    var result = highlightLine(cm, line, context);
                    if (resetState) {
                        context.state = resetState;
                    }
                    line.stateAfter = context.save(!resetState);
                    line.styles = result.styles;
                    if (result.classes) {
                        line.styleClasses = result.classes;
                    } else if (line.styleClasses) {
                        line.styleClasses = null;
                    }
                    if (updateFrontier === cm.doc.highlightFrontier) {
                        cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier);
                    }
                }
                return line.styles;
            }
            function getContextBefore(cm, n, precise) {
                var doc = cm.doc, display = cm.display;
                if (!doc.mode.startState) {
                    return new Context(doc, true, n);
                }
                var start = findStartLine(cm, n, precise);
                var saved = start > doc.first && getLine(doc, start - 1).stateAfter;
                var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);
                doc.iter(start, n, function (line) {
                    processLine(cm, line.text, context);
                    var pos = context.line;
                    line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;
                    context.nextLine();
                });
                if (precise) {
                    doc.modeFrontier = context.line;
                }
                return context;
            }
            function processLine(cm, text, context, startAt) {
                var mode = cm.doc.mode;
                var stream = new StringStream(text, cm.options.tabSize, context);
                stream.start = stream.pos = startAt || 0;
                if (text == "") {
                    callBlankLine(mode, context.state);
                }
                while (!stream.eol()) {
                    readToken(mode, stream, context.state);
                    stream.start = stream.pos;
                }
            }
            function callBlankLine(mode, state) {
                if (mode.blankLine) {
                    return mode.blankLine(state);
                }
                if (!mode.innerMode) {
                    return;
                }
                var inner = innerMode(mode, state);
                if (inner.mode.blankLine) {
                    return inner.mode.blankLine(inner.state);
                }
            }
            function readToken(mode, stream, state, inner) {
                for (var i = 0; i < 10; i++) {
                    if (inner) {
                        inner[0] = innerMode(mode, state).mode;
                    }
                    var style = mode.token(stream, state);
                    if (stream.pos > stream.start) {
                        return style;
                    }
                }
                throw new Error("Mode " + mode.name + " failed to advance stream.");
            }
            var Token = function (stream, type, state) {
                this.start = stream.start;
                this.end = stream.pos;
                this.string = stream.current();
                this.type = type || null;
                this.state = state;
            };
            function takeToken(cm, pos, precise, asArray) {
                var doc = cm.doc, mode = doc.mode, style;
                pos = clipPos(doc, pos);
                var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);
                var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;
                if (asArray) {
                    tokens = [];
                }
                while ((asArray || stream.pos < pos.ch) && !stream.eol()) {
                    stream.start = stream.pos;
                    style = readToken(mode, stream, context.state);
                    if (asArray) {
                        tokens.push(new Token(stream, style, copyState(doc.mode, context.state)));
                    }
                }
                return asArray ? tokens : new Token(stream, style, context.state);
            }
            function extractLineClasses(type, output) {
                if (type) {
                    for (; ; ) {
                        var lineClass = type.match(/(?:^|\s+)line-(background-)?(\S+)/);
                        if (!lineClass) {
                            break;
                        }
                        type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);
                        var prop = lineClass[1] ? "bgClass" : "textClass";
                        if (output[prop] == null) {
                            output[prop] = lineClass[2];
                        } else if (!new RegExp("(?:^|\\s)" + lineClass[2] + "(?:$|\\s)").test(output[prop])) {
                            output[prop] += " " + lineClass[2];
                        }
                    }
                }
                return type;
            }
            function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {
                var flattenSpans = mode.flattenSpans;
                if (flattenSpans == null) {
                    flattenSpans = cm.options.flattenSpans;
                }
                var curStart = 0, curStyle = null;
                var stream = new StringStream(text, cm.options.tabSize, context), style;
                var inner = cm.options.addModeClass && [null];
                if (text == "") {
                    extractLineClasses(callBlankLine(mode, context.state), lineClasses);
                }
                while (!stream.eol()) {
                    if (stream.pos > cm.options.maxHighlightLength) {
                        flattenSpans = false;
                        if (forceToEnd) {
                            processLine(cm, text, context, stream.pos);
                        }
                        stream.pos = text.length;
                        style = null;
                    } else {
                        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);
                    }
                    if (inner) {
                        var mName = inner[0].name;
                        if (mName) {
                            style = "m-" + (style ? mName + " " + style : mName);
                        }
                    }
                    if (!flattenSpans || curStyle != style) {
                        while (curStart < stream.start) {
                            curStart = Math.min(stream.start, curStart + 5000);
                            f(curStart, curStyle);
                        }
                        curStyle = style;
                    }
                    stream.start = stream.pos;
                }
                while (curStart < stream.pos) {
                    var pos = Math.min(stream.pos, curStart + 5000);
                    f(pos, curStyle);
                    curStart = pos;
                }
            }
            function findStartLine(cm, n, precise) {
                var minindent, minline, doc = cm.doc;
                var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);
                for (var search = n; search > lim; --search) {
                    if (search <= doc.first) {
                        return doc.first;
                    }
                    var line = getLine(doc, search - 1), after = line.stateAfter;
                    if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier)) {
                        return search;
                    }
                    var indented = countColumn(line.text, null, cm.options.tabSize);
                    if (minline == null || minindent > indented) {
                        minline = search - 1;
                        minindent = indented;
                    }
                }
                return minline;
            }
            function retreatFrontier(doc, n) {
                doc.modeFrontier = Math.min(doc.modeFrontier, n);
                if (doc.highlightFrontier < n - 10) {
                    return;
                }
                var start = doc.first;
                for (var line = n - 1; line > start; line--) {
                    var saved = getLine(doc, line).stateAfter;
                    if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {
                        start = line + 1;
                        break;
                    }
                }
                doc.highlightFrontier = Math.min(doc.highlightFrontier, start);
            }
            var sawReadOnlySpans = false, sawCollapsedSpans = false;
            function seeReadOnlySpans() {
                sawReadOnlySpans = true;
            }
            function seeCollapsedSpans() {
                sawCollapsedSpans = true;
            }
            function MarkedSpan(marker, from, to) {
                this.marker = marker;
                this.from = from;
                this.to = to;
            }
            function getMarkedSpanFor(spans, marker) {
                if (spans) {
                    for (var i = 0; i < spans.length; ++i) {
                        var span = spans[i];
                        if (span.marker == marker) {
                            return span;
                        }
                    }
                }
            }
            function removeMarkedSpan(spans, span) {
                var r;
                for (var i = 0; i < spans.length; ++i) {
                    if (spans[i] != span) {
                        (r || (r = [])).push(spans[i]);
                    }
                }
                return r;
            }
            function addMarkedSpan(line, span, op) {
                var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet()));
                if (inThisOp && line.markedSpans && inThisOp.has(line.markedSpans)) {
                    line.markedSpans.push(span);
                } else {
                    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];
                    if (inThisOp) {
                        inThisOp.add(line.markedSpans);
                    }
                }
                span.marker.attachLine(line);
            }
            function markedSpansBefore(old, startCh, isInsert) {
                var nw;
                if (old) {
                    for (var i = 0; i < old.length; ++i) {
                        var span = old[i], marker = span.marker;
                        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);
                        if (startsBefore || span.from == startCh && marker.type == "bookmark" && (!isInsert || !span.marker.insertLeft)) {
                            var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh);
                            (nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));
                        }
                    }
                }
                return nw;
            }
            function markedSpansAfter(old, endCh, isInsert) {
                var nw;
                if (old) {
                    for (var i = 0; i < old.length; ++i) {
                        var span = old[i], marker = span.marker;
                        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);
                        if (endsAfter || span.from == endCh && marker.type == "bookmark" && (!isInsert || span.marker.insertLeft)) {
                            var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh);
                            (nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh, span.to == null ? null : span.to - endCh));
                        }
                    }
                }
                return nw;
            }
            function stretchSpansOverChange(doc, change) {
                if (change.full) {
                    return null;
                }
                var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;
                var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;
                if (!oldFirst && !oldLast) {
                    return null;
                }
                var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;
                var first = markedSpansBefore(oldFirst, startCh, isInsert);
                var last = markedSpansAfter(oldLast, endCh, isInsert);
                var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);
                if (first) {
                    for (var i = 0; i < first.length; ++i) {
                        var span = first[i];
                        if (span.to == null) {
                            var found = getMarkedSpanFor(last, span.marker);
                            if (!found) {
                                span.to = startCh;
                            } else if (sameLine) {
                                span.to = found.to == null ? null : found.to + offset;
                            }
                        }
                    }
                }
                if (last) {
                    for (var i$1 = 0; i$1 < last.length; ++i$1) {
                        var span$1 = last[i$1];
                        if (span$1.to != null) {
                            span$1.to += offset;
                        }
                        if (span$1.from == null) {
                            var found$1 = getMarkedSpanFor(first, span$1.marker);
                            if (!found$1) {
                                span$1.from = offset;
                                if (sameLine) {
                                    (first || (first = [])).push(span$1);
                                }
                            }
                        } else {
                            span$1.from += offset;
                            if (sameLine) {
                                (first || (first = [])).push(span$1);
                            }
                        }
                    }
                }
                if (first) {
                    first = clearEmptySpans(first);
                }
                if (last && last != first) {
                    last = clearEmptySpans(last);
                }
                var newMarkers = [first];
                if (!sameLine) {
                    var gap = change.text.length - 2, gapMarkers;
                    if (gap > 0 && first) {
                        for (var i$2 = 0; i$2 < first.length; ++i$2) {
                            if (first[i$2].to == null) {
                                (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null));
                            }
                        }
                    }
                    for (var i$3 = 0; i$3 < gap; ++i$3) {
                        newMarkers.push(gapMarkers);
                    }
                    newMarkers.push(last);
                }
                return newMarkers;
            }
            function clearEmptySpans(spans) {
                for (var i = 0; i < spans.length; ++i) {
                    var span = spans[i];
                    if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false) {
                        spans.splice(i--, 1);
                    }
                }
                if (!spans.length) {
                    return null;
                }
                return spans;
            }
            function removeReadOnlyRanges(doc, from, to) {
                var markers = null;
                doc.iter(from.line, to.line + 1, function (line) {
                    if (line.markedSpans) {
                        for (var i = 0; i < line.markedSpans.length; ++i) {
                            var mark = line.markedSpans[i].marker;
                            if (mark.readOnly && (!markers || indexOf(markers, mark) == -1)) {
                                (markers || (markers = [])).push(mark);
                            }
                        }
                    }
                });
                if (!markers) {
                    return null;
                }
                var parts = [{
                    from: from,
                    to: to
                }];
                for (var i = 0; i < markers.length; ++i) {
                    var mk = markers[i], m = mk.find(0);
                    for (var j = 0; j < parts.length; ++j) {
                        var p = parts[j];
                        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) {
                            continue;
                        }
                        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);
                        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom) {
                            newParts.push({
                                from: p.from,
                                to: m.from
                            });
                        }
                        if (dto > 0 || !mk.inclusiveRight && !dto) {
                            newParts.push({
                                from: m.to,
                                to: p.to
                            });
                        }
                        parts.splice.apply(parts, newParts);
                        j += newParts.length - 3;
                    }
                }
                return parts;
            }
            function detachMarkedSpans(line) {
                var spans = line.markedSpans;
                if (!spans) {
                    return;
                }
                for (var i = 0; i < spans.length; ++i) {
                    spans[i].marker.detachLine(line);
                }
                line.markedSpans = null;
            }
            function attachMarkedSpans(line, spans) {
                if (!spans) {
                    return;
                }
                for (var i = 0; i < spans.length; ++i) {
                    spans[i].marker.attachLine(line);
                }
                line.markedSpans = spans;
            }
            function extraLeft(marker) {
                return marker.inclusiveLeft ? -1 : 0;
            }
            function extraRight(marker) {
                return marker.inclusiveRight ? 1 : 0;
            }
            function compareCollapsedMarkers(a, b) {
                var lenDiff = a.lines.length - b.lines.length;
                if (lenDiff != 0) {
                    return lenDiff;
                }
                var aPos = a.find(), bPos = b.find();
                var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);
                if (fromCmp) {
                    return -fromCmp;
                }
                var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);
                if (toCmp) {
                    return toCmp;
                }
                return b.id - a.id;
            }
            function collapsedSpanAtSide(line, start) {
                var sps = sawCollapsedSpans && line.markedSpans, found;
                if (sps) {
                    for (var sp = void 0, i = 0; i < sps.length; ++i) {
                        sp = sps[i];
                        if (sp.marker.collapsed && (start ? sp.from : sp.to) == null && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {
                            found = sp.marker;
                        }
                    }
                }
                return found;
            }
            function collapsedSpanAtStart(line) {
                return collapsedSpanAtSide(line, true);
            }
            function collapsedSpanAtEnd(line) {
                return collapsedSpanAtSide(line, false);
            }
            function collapsedSpanAround(line, ch) {
                var sps = sawCollapsedSpans && line.markedSpans, found;
                if (sps) {
                    for (var i = 0; i < sps.length; ++i) {
                        var sp = sps[i];
                        if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) && (!found || compareCollapsedMarkers(found, sp.marker) < 0)) {
                            found = sp.marker;
                        }
                    }
                }
                return found;
            }
            function conflictingCollapsedRange(doc, lineNo, from, to, marker) {
                var line = getLine(doc, lineNo);
                var sps = sawCollapsedSpans && line.markedSpans;
                if (sps) {
                    for (var i = 0; i < sps.length; ++i) {
                        var sp = sps[i];
                        if (!sp.marker.collapsed) {
                            continue;
                        }
                        var found = sp.marker.find(0);
                        var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
                        var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
                        if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) {
                            continue;
                        }
                        if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) || fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0)) {
                            return true;
                        }
                    }
                }
            }
            function visualLine(line) {
                var merged;
                while (merged = collapsedSpanAtStart(line)) {
                    line = merged.find(-1, true).line;
                }
                return line;
            }
            function visualLineEnd(line) {
                var merged;
                while (merged = collapsedSpanAtEnd(line)) {
                    line = merged.find(1, true).line;
                }
                return line;
            }
            function visualLineContinued(line) {
                var merged, lines;
                while (merged = collapsedSpanAtEnd(line)) {
                    line = merged.find(1, true).line;
                    (lines || (lines = [])).push(line);
                }
                return lines;
            }
            function visualLineNo(doc, lineN) {
                var line = getLine(doc, lineN), vis = visualLine(line);
                if (line == vis) {
                    return lineN;
                }
                return lineNo(vis);
            }
            function visualLineEndNo(doc, lineN) {
                if (lineN > doc.lastLine()) {
                    return lineN;
                }
                var line = getLine(doc, lineN), merged;
                if (!lineIsHidden(doc, line)) {
                    return lineN;
                }
                while (merged = collapsedSpanAtEnd(line)) {
                    line = merged.find(1, true).line;
                }
                return lineNo(line) + 1;
            }
            function lineIsHidden(doc, line) {
                var sps = sawCollapsedSpans && line.markedSpans;
                if (sps) {
                    for (var sp = void 0, i = 0; i < sps.length; ++i) {
                        sp = sps[i];
                        if (!sp.marker.collapsed) {
                            continue;
                        }
                        if (sp.from == null) {
                            return true;
                        }
                        if (sp.marker.widgetNode) {
                            continue;
                        }
                        if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp)) {
                            return true;
                        }
                    }
                }
            }
            function lineIsHiddenInner(doc, line, span) {
                if (span.to == null) {
                    var end = span.marker.find(1, true);
                    return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker));
                }
                if (span.marker.inclusiveRight && span.to == line.text.length) {
                    return true;
                }
                for (var sp = void 0, i = 0; i < line.markedSpans.length; ++i) {
                    sp = line.markedSpans[i];
                    if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to && (sp.to == null || sp.to != span.from) && (sp.marker.inclusiveLeft || span.marker.inclusiveRight) && lineIsHiddenInner(doc, line, sp)) {
                        return true;
                    }
                }
            }
            function heightAtLine(lineObj) {
                lineObj = visualLine(lineObj);
                var h = 0, chunk = lineObj.parent;
                for (var i = 0; i < chunk.lines.length; ++i) {
                    var line = chunk.lines[i];
                    if (line == lineObj) {
                        break;
                    } else {
                        h += line.height;
                    }
                }
                for (var p = chunk.parent; p; (chunk = p, p = chunk.parent)) {
                    for (var i$1 = 0; i$1 < p.children.length; ++i$1) {
                        var cur = p.children[i$1];
                        if (cur == chunk) {
                            break;
                        } else {
                            h += cur.height;
                        }
                    }
                }
                return h;
            }
            function lineLength(line) {
                if (line.height == 0) {
                    return 0;
                }
                var len = line.text.length, merged, cur = line;
                while (merged = collapsedSpanAtStart(cur)) {
                    var found = merged.find(0, true);
                    cur = found.from.line;
                    len += found.from.ch - found.to.ch;
                }
                cur = line;
                while (merged = collapsedSpanAtEnd(cur)) {
                    var found$1 = merged.find(0, true);
                    len -= cur.text.length - found$1.from.ch;
                    cur = found$1.to.line;
                    len += cur.text.length - found$1.to.ch;
                }
                return len;
            }
            function findMaxLine(cm) {
                var d = cm.display, doc = cm.doc;
                d.maxLine = getLine(doc, doc.first);
                d.maxLineLength = lineLength(d.maxLine);
                d.maxLineChanged = true;
                doc.iter(function (line) {
                    var len = lineLength(line);
                    if (len > d.maxLineLength) {
                        d.maxLineLength = len;
                        d.maxLine = line;
                    }
                });
            }
            var Line = function (text, markedSpans, estimateHeight) {
                this.text = text;
                attachMarkedSpans(this, markedSpans);
                this.height = estimateHeight ? estimateHeight(this) : 1;
            };
            Line.prototype.lineNo = function () {
                return lineNo(this);
            };
            eventMixin(Line);
            function updateLine(line, text, markedSpans, estimateHeight) {
                line.text = text;
                if (line.stateAfter) {
                    line.stateAfter = null;
                }
                if (line.styles) {
                    line.styles = null;
                }
                if (line.order != null) {
                    line.order = null;
                }
                detachMarkedSpans(line);
                attachMarkedSpans(line, markedSpans);
                var estHeight = estimateHeight ? estimateHeight(line) : 1;
                if (estHeight != line.height) {
                    updateLineHeight(line, estHeight);
                }
            }
            function cleanUpLine(line) {
                line.parent = null;
                detachMarkedSpans(line);
            }
            var styleToClassCache = {}, styleToClassCacheWithMode = {};
            function interpretTokenStyle(style, options) {
                if (!style || (/^\s*$/).test(style)) {
                    return null;
                }
                var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;
                return cache[style] || (cache[style] = style.replace(/\S+/g, "cm-$&"));
            }
            function buildLineContent(cm, lineView) {
                var content = eltP("span", null, null, webkit ? "padding-right: .1px" : null);
                var builder = {
                    pre: eltP("pre", [content], "CodeMirror-line"),
                    content: content,
                    col: 0,
                    pos: 0,
                    cm: cm,
                    trailingSpace: false,
                    splitSpaces: cm.getOption("lineWrapping")
                };
                lineView.measure = {};
                for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {
                    var line = i ? lineView.rest[i - 1] : lineView.line, order = void 0;
                    builder.pos = 0;
                    builder.addToken = buildToken;
                    if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction))) {
                        builder.addToken = buildTokenBadBidi(builder.addToken, order);
                    }
                    builder.map = [];
                    var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);
                    insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));
                    if (line.styleClasses) {
                        if (line.styleClasses.bgClass) {
                            builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || "");
                        }
                        if (line.styleClasses.textClass) {
                            builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || "");
                        }
                    }
                    if (builder.map.length == 0) {
                        builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));
                    }
                    if (i == 0) {
                        lineView.measure.map = builder.map;
                        lineView.measure.cache = {};
                    } else {
                        (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);
                        (lineView.measure.caches || (lineView.measure.caches = [])).push({});
                    }
                }
                if (webkit) {
                    var last = builder.content.lastChild;
                    if ((/\bcm-tab\b/).test(last.className) || last.querySelector && last.querySelector(".cm-tab")) {
                        builder.content.className = "cm-tab-wrap-hack";
                    }
                }
                signal(cm, "renderLine", cm, lineView.line, builder.pre);
                if (builder.pre.className) {
                    builder.textClass = joinClasses(builder.pre.className, builder.textClass || "");
                }
                return builder;
            }
            function defaultSpecialCharPlaceholder(ch) {
                var token = elt("span", "\u2022", "cm-invalidchar");
                token.title = "\\u" + ch.charCodeAt(0).toString(16);
                token.setAttribute("aria-label", token.title);
                return token;
            }
            function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {
                if (!text) {
                    return;
                }
                var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;
                var special = builder.cm.state.specialChars, mustWrap = false;
                var content;
                if (!special.test(text)) {
                    builder.col += text.length;
                    content = document.createTextNode(displayText);
                    builder.map.push(builder.pos, builder.pos + text.length, content);
                    if (ie && ie_version < 9) {
                        mustWrap = true;
                    }
                    builder.pos += text.length;
                } else {
                    content = document.createDocumentFragment();
                    var pos = 0;
                    while (true) {
                        special.lastIndex = pos;
                        var m = special.exec(text);
                        var skipped = m ? m.index - pos : text.length - pos;
                        if (skipped) {
                            var txt = document.createTextNode(displayText.slice(pos, pos + skipped));
                            if (ie && ie_version < 9) {
                                content.appendChild(elt("span", [txt]));
                            } else {
                                content.appendChild(txt);
                            }
                            builder.map.push(builder.pos, builder.pos + skipped, txt);
                            builder.col += skipped;
                            builder.pos += skipped;
                        }
                        if (!m) {
                            break;
                        }
                        pos += skipped + 1;
                        var txt$1 = void 0;
                        if (m[0] == "\t") {
                            var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;
                            txt$1 = content.appendChild(elt("span", spaceStr(tabWidth), "cm-tab"));
                            txt$1.setAttribute("role", "presentation");
                            txt$1.setAttribute("cm-text", "\t");
                            builder.col += tabWidth;
                        } else if (m[0] == "\r" || m[0] == "\n") {
                            txt$1 = content.appendChild(elt("span", m[0] == "\r" ? "\u240d" : "\u2424", "cm-invalidchar"));
                            txt$1.setAttribute("cm-text", m[0]);
                            builder.col += 1;
                        } else {
                            txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);
                            txt$1.setAttribute("cm-text", m[0]);
                            if (ie && ie_version < 9) {
                                content.appendChild(elt("span", [txt$1]));
                            } else {
                                content.appendChild(txt$1);
                            }
                            builder.col += 1;
                        }
                        builder.map.push(builder.pos, builder.pos + 1, txt$1);
                        builder.pos++;
                    }
                }
                builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;
                if (style || startStyle || endStyle || mustWrap || css || attributes) {
                    var fullStyle = style || "";
                    if (startStyle) {
                        fullStyle += startStyle;
                    }
                    if (endStyle) {
                        fullStyle += endStyle;
                    }
                    var token = elt("span", [content], fullStyle, css);
                    if (attributes) {
                        for (var attr in attributes) {
                            if (attributes.hasOwnProperty(attr) && attr != "style" && attr != "class") {
                                token.setAttribute(attr, attributes[attr]);
                            }
                        }
                    }
                    return builder.content.appendChild(token);
                }
                builder.content.appendChild(content);
            }
            function splitSpaces(text, trailingBefore) {
                if (text.length > 1 && !(/  /).test(text)) {
                    return text;
                }
                var spaceBefore = trailingBefore, result = "";
                for (var i = 0; i < text.length; i++) {
                    var ch = text.charAt(i);
                    if (ch == " " && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32)) {
                        ch = "\u00a0";
                    }
                    result += ch;
                    spaceBefore = ch == " ";
                }
                return result;
            }
            function buildTokenBadBidi(inner, order) {
                return function (builder, text, style, startStyle, endStyle, css, attributes) {
                    style = style ? style + " cm-force-border" : "cm-force-border";
                    var start = builder.pos, end = start + text.length;
                    for (; ; ) {
                        var part = void 0;
                        for (var i = 0; i < order.length; i++) {
                            part = order[i];
                            if (part.to > start && part.from <= start) {
                                break;
                            }
                        }
                        if (part.to >= end) {
                            return inner(builder, text, style, startStyle, endStyle, css, attributes);
                        }
                        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);
                        startStyle = null;
                        text = text.slice(part.to - start);
                        start = part.to;
                    }
                };
            }
            function buildCollapsedSpan(builder, size, marker, ignoreWidget) {
                var widget = !ignoreWidget && marker.widgetNode;
                if (widget) {
                    builder.map.push(builder.pos, builder.pos + size, widget);
                }
                if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {
                    if (!widget) {
                        widget = builder.content.appendChild(document.createElement("span"));
                    }
                    widget.setAttribute("cm-marker", marker.id);
                }
                if (widget) {
                    builder.cm.display.input.setUneditable(widget);
                    builder.content.appendChild(widget);
                }
                builder.pos += size;
                builder.trailingSpace = false;
            }
            function insertLineContent(line, builder, styles) {
                var spans = line.markedSpans, allText = line.text, at = 0;
                if (!spans) {
                    for (var i$1 = 1; i$1 < styles.length; i$1 += 2) {
                        builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1 + 1], builder.cm.options));
                    }
                    return;
                }
                var len = allText.length, pos = 0, i = 1, text = "", style, css;
                var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;
                for (; ; ) {
                    if (nextChange == pos) {
                        spanStyle = spanEndStyle = spanStartStyle = css = "";
                        attributes = null;
                        collapsed = null;
                        nextChange = Infinity;
                        var foundBookmarks = [], endStyles = void 0;
                        for (var j = 0; j < spans.length; ++j) {
                            var sp = spans[j], m = sp.marker;
                            if (m.type == "bookmark" && sp.from == pos && m.widgetNode) {
                                foundBookmarks.push(m);
                            } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {
                                if (sp.to != null && sp.to != pos && nextChange > sp.to) {
                                    nextChange = sp.to;
                                    spanEndStyle = "";
                                }
                                if (m.className) {
                                    spanStyle += " " + m.className;
                                }
                                if (m.css) {
                                    css = (css ? css + ";" : "") + m.css;
                                }
                                if (m.startStyle && sp.from == pos) {
                                    spanStartStyle += " " + m.startStyle;
                                }
                                if (m.endStyle && sp.to == nextChange) {
                                    (endStyles || (endStyles = [])).push(m.endStyle, sp.to);
                                }
                                if (m.title) {
                                    (attributes || (attributes = {})).title = m.title;
                                }
                                if (m.attributes) {
                                    for (var attr in m.attributes) {
                                        (attributes || (attributes = {}))[attr] = m.attributes[attr];
                                    }
                                }
                                if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0)) {
                                    collapsed = sp;
                                }
                            } else if (sp.from > pos && nextChange > sp.from) {
                                nextChange = sp.from;
                            }
                        }
                        if (endStyles) {
                            for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2) {
                                if (endStyles[j$1 + 1] == nextChange) {
                                    spanEndStyle += " " + endStyles[j$1];
                                }
                            }
                        }
                        if (!collapsed || collapsed.from == pos) {
                            for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2) {
                                buildCollapsedSpan(builder, 0, foundBookmarks[j$2]);
                            }
                        }
                        if (collapsed && (collapsed.from || 0) == pos) {
                            buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos, collapsed.marker, collapsed.from == null);
                            if (collapsed.to == null) {
                                return;
                            }
                            if (collapsed.to == pos) {
                                collapsed = false;
                            }
                        }
                    }
                    if (pos >= len) {
                        break;
                    }
                    var upto = Math.min(len, nextChange);
                    while (true) {
                        if (text) {
                            var end = pos + text.length;
                            if (!collapsed) {
                                var tokenText = end > upto ? text.slice(0, upto - pos) : text;
                                builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle, spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : "", css, attributes);
                            }
                            if (end >= upto) {
                                text = text.slice(upto - pos);
                                pos = upto;
                                break;
                            }
                            pos = end;
                            spanStartStyle = "";
                        }
                        text = allText.slice(at, at = styles[i++]);
                        style = interpretTokenStyle(styles[i++], builder.cm.options);
                    }
                }
            }
            function LineView(doc, line, lineN) {
                this.line = line;
                this.rest = visualLineContinued(line);
                this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;
                this.node = this.text = null;
                this.hidden = lineIsHidden(doc, line);
            }
            function buildViewArray(cm, from, to) {
                var array = [], nextPos;
                for (var pos = from; pos < to; pos = nextPos) {
                    var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);
                    nextPos = pos + view.size;
                    array.push(view);
                }
                return array;
            }
            var operationGroup = null;
            function pushOperation(op) {
                if (operationGroup) {
                    operationGroup.ops.push(op);
                } else {
                    op.ownsGroup = operationGroup = {
                        ops: [op],
                        delayedCallbacks: []
                    };
                }
            }
            function fireCallbacksForOps(group) {
                var callbacks = group.delayedCallbacks, i = 0;
                do {
                    for (; i < callbacks.length; i++) {
                        callbacks[i].call(null);
                    }
                    for (var j = 0; j < group.ops.length; j++) {
                        var op = group.ops[j];
                        if (op.cursorActivityHandlers) {
                            while (op.cursorActivityCalled < op.cursorActivityHandlers.length) {
                                op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm);
                            }
                        }
                    }
                } while (i < callbacks.length);
            }
            function finishOperation(op, endCb) {
                var group = op.ownsGroup;
                if (!group) {
                    return;
                }
                try {
                    fireCallbacksForOps(group);
                } finally {
                    operationGroup = null;
                    endCb(group);
                }
            }
            var orphanDelayedCallbacks = null;
            function signalLater(emitter, type) {
                var arr = getHandlers(emitter, type);
                if (!arr.length) {
                    return;
                }
                var args = Array.prototype.slice.call(arguments, 2), list;
                if (operationGroup) {
                    list = operationGroup.delayedCallbacks;
                } else if (orphanDelayedCallbacks) {
                    list = orphanDelayedCallbacks;
                } else {
                    list = orphanDelayedCallbacks = [];
                    setTimeout(fireOrphanDelayed, 0);
                }
                var loop = function (i) {
                    list.push(function () {
                        return arr[i].apply(null, args);
                    });
                };
                for (var i = 0; i < arr.length; ++i) loop(i);
            }
            function fireOrphanDelayed() {
                var delayed = orphanDelayedCallbacks;
                orphanDelayedCallbacks = null;
                for (var i = 0; i < delayed.length; ++i) {
                    delayed[i]();
                }
            }
            function updateLineForChanges(cm, lineView, lineN, dims) {
                for (var j = 0; j < lineView.changes.length; j++) {
                    var type = lineView.changes[j];
                    if (type == "text") {
                        updateLineText(cm, lineView);
                    } else if (type == "gutter") {
                        updateLineGutter(cm, lineView, lineN, dims);
                    } else if (type == "class") {
                        updateLineClasses(cm, lineView);
                    } else if (type == "widget") {
                        updateLineWidgets(cm, lineView, dims);
                    }
                }
                lineView.changes = null;
            }
            function ensureLineWrapped(lineView) {
                if (lineView.node == lineView.text) {
                    lineView.node = elt("div", null, null, "position: relative");
                    if (lineView.text.parentNode) {
                        lineView.text.parentNode.replaceChild(lineView.node, lineView.text);
                    }
                    lineView.node.appendChild(lineView.text);
                    if (ie && ie_version < 8) {
                        lineView.node.style.zIndex = 2;
                    }
                }
                return lineView.node;
            }
            function updateLineBackground(cm, lineView) {
                var cls = lineView.bgClass ? lineView.bgClass + " " + (lineView.line.bgClass || "") : lineView.line.bgClass;
                if (cls) {
                    cls += " CodeMirror-linebackground";
                }
                if (lineView.background) {
                    if (cls) {
                        lineView.background.className = cls;
                    } else {
                        lineView.background.parentNode.removeChild(lineView.background);
                        lineView.background = null;
                    }
                } else if (cls) {
                    var wrap = ensureLineWrapped(lineView);
                    lineView.background = wrap.insertBefore(elt("div", null, cls), wrap.firstChild);
                    cm.display.input.setUneditable(lineView.background);
                }
            }
            function getLineContent(cm, lineView) {
                var ext = cm.display.externalMeasured;
                if (ext && ext.line == lineView.line) {
                    cm.display.externalMeasured = null;
                    lineView.measure = ext.measure;
                    return ext.built;
                }
                return buildLineContent(cm, lineView);
            }
            function updateLineText(cm, lineView) {
                var cls = lineView.text.className;
                var built = getLineContent(cm, lineView);
                if (lineView.text == lineView.node) {
                    lineView.node = built.pre;
                }
                lineView.text.parentNode.replaceChild(built.pre, lineView.text);
                lineView.text = built.pre;
                if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {
                    lineView.bgClass = built.bgClass;
                    lineView.textClass = built.textClass;
                    updateLineClasses(cm, lineView);
                } else if (cls) {
                    lineView.text.className = cls;
                }
            }
            function updateLineClasses(cm, lineView) {
                updateLineBackground(cm, lineView);
                if (lineView.line.wrapClass) {
                    ensureLineWrapped(lineView).className = lineView.line.wrapClass;
                } else if (lineView.node != lineView.text) {
                    lineView.node.className = "";
                }
                var textClass = lineView.textClass ? lineView.textClass + " " + (lineView.line.textClass || "") : lineView.line.textClass;
                lineView.text.className = textClass || "";
            }
            function updateLineGutter(cm, lineView, lineN, dims) {
                if (lineView.gutter) {
                    lineView.node.removeChild(lineView.gutter);
                    lineView.gutter = null;
                }
                if (lineView.gutterBackground) {
                    lineView.node.removeChild(lineView.gutterBackground);
                    lineView.gutterBackground = null;
                }
                if (lineView.line.gutterClass) {
                    var wrap = ensureLineWrapped(lineView);
                    lineView.gutterBackground = elt("div", null, "CodeMirror-gutter-background " + lineView.line.gutterClass, "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px; width: " + dims.gutterTotalWidth + "px");
                    cm.display.input.setUneditable(lineView.gutterBackground);
                    wrap.insertBefore(lineView.gutterBackground, lineView.text);
                }
                var markers = lineView.line.gutterMarkers;
                if (cm.options.lineNumbers || markers) {
                    var wrap$1 = ensureLineWrapped(lineView);
                    var gutterWrap = lineView.gutter = elt("div", null, "CodeMirror-gutter-wrapper", "left: " + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + "px");
                    gutterWrap.setAttribute("aria-hidden", "true");
                    cm.display.input.setUneditable(gutterWrap);
                    wrap$1.insertBefore(gutterWrap, lineView.text);
                    if (lineView.line.gutterClass) {
                        gutterWrap.className += " " + lineView.line.gutterClass;
                    }
                    if (cm.options.lineNumbers && (!markers || !markers["CodeMirror-linenumbers"])) {
                        lineView.lineNumber = gutterWrap.appendChild(elt("div", lineNumberFor(cm.options, lineN), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + dims.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + cm.display.lineNumInnerWidth + "px"));
                    }
                    if (markers) {
                        for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {
                            var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];
                            if (found) {
                                gutterWrap.appendChild(elt("div", [found], "CodeMirror-gutter-elt", "left: " + dims.gutterLeft[id] + "px; width: " + dims.gutterWidth[id] + "px"));
                            }
                        }
                    }
                }
            }
            function updateLineWidgets(cm, lineView, dims) {
                if (lineView.alignable) {
                    lineView.alignable = null;
                }
                var isWidget = classTest("CodeMirror-linewidget");
                for (var node = lineView.node.firstChild, next = void 0; node; node = next) {
                    next = node.nextSibling;
                    if (isWidget.test(node.className)) {
                        lineView.node.removeChild(node);
                    }
                }
                insertLineWidgets(cm, lineView, dims);
            }
            function buildLineElement(cm, lineView, lineN, dims) {
                var built = getLineContent(cm, lineView);
                lineView.text = lineView.node = built.pre;
                if (built.bgClass) {
                    lineView.bgClass = built.bgClass;
                }
                if (built.textClass) {
                    lineView.textClass = built.textClass;
                }
                updateLineClasses(cm, lineView);
                updateLineGutter(cm, lineView, lineN, dims);
                insertLineWidgets(cm, lineView, dims);
                return lineView.node;
            }
            function insertLineWidgets(cm, lineView, dims) {
                insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);
                if (lineView.rest) {
                    for (var i = 0; i < lineView.rest.length; i++) {
                        insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false);
                    }
                }
            }
            function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {
                if (!line.widgets) {
                    return;
                }
                var wrap = ensureLineWrapped(lineView);
                for (var i = 0, ws = line.widgets; i < ws.length; ++i) {
                    var widget = ws[i], node = elt("div", [widget.node], "CodeMirror-linewidget" + (widget.className ? " " + widget.className : ""));
                    if (!widget.handleMouseEvents) {
                        node.setAttribute("cm-ignore-events", "true");
                    }
                    positionLineWidget(widget, node, lineView, dims);
                    cm.display.input.setUneditable(node);
                    if (allowAbove && widget.above) {
                        wrap.insertBefore(node, lineView.gutter || lineView.text);
                    } else {
                        wrap.appendChild(node);
                    }
                    signalLater(widget, "redraw");
                }
            }
            function positionLineWidget(widget, node, lineView, dims) {
                if (widget.noHScroll) {
                    (lineView.alignable || (lineView.alignable = [])).push(node);
                    var width = dims.wrapperWidth;
                    node.style.left = dims.fixedPos + "px";
                    if (!widget.coverGutter) {
                        width -= dims.gutterTotalWidth;
                        node.style.paddingLeft = dims.gutterTotalWidth + "px";
                    }
                    node.style.width = width + "px";
                }
                if (widget.coverGutter) {
                    node.style.zIndex = 5;
                    node.style.position = "relative";
                    if (!widget.noHScroll) {
                        node.style.marginLeft = -dims.gutterTotalWidth + "px";
                    }
                }
            }
            function widgetHeight(widget) {
                if (widget.height != null) {
                    return widget.height;
                }
                var cm = widget.doc.cm;
                if (!cm) {
                    return 0;
                }
                if (!contains(document.body, widget.node)) {
                    var parentStyle = "position: relative;";
                    if (widget.coverGutter) {
                        parentStyle += "margin-left: -" + cm.display.gutters.offsetWidth + "px;";
                    }
                    if (widget.noHScroll) {
                        parentStyle += "width: " + cm.display.wrapper.clientWidth + "px;";
                    }
                    removeChildrenAndAdd(cm.display.measure, elt("div", [widget.node], null, parentStyle));
                }
                return widget.height = widget.node.parentNode.offsetHeight;
            }
            function eventInWidget(display, e) {
                for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {
                    if (!n || n.nodeType == 1 && n.getAttribute("cm-ignore-events") == "true" || n.parentNode == display.sizer && n != display.mover) {
                        return true;
                    }
                }
            }
            function paddingTop(display) {
                return display.lineSpace.offsetTop;
            }
            function paddingVert(display) {
                return display.mover.offsetHeight - display.lineSpace.offsetHeight;
            }
            function paddingH(display) {
                if (display.cachedPaddingH) {
                    return display.cachedPaddingH;
                }
                var e = removeChildrenAndAdd(display.measure, elt("pre", "x", "CodeMirror-line-like"));
                var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;
                var data = {
                    left: parseInt(style.paddingLeft),
                    right: parseInt(style.paddingRight)
                };
                if (!isNaN(data.left) && !isNaN(data.right)) {
                    display.cachedPaddingH = data;
                }
                return data;
            }
            function scrollGap(cm) {
                return scrollerGap - cm.display.nativeBarWidth;
            }
            function displayWidth(cm) {
                return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth;
            }
            function displayHeight(cm) {
                return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight;
            }
            function ensureLineHeights(cm, lineView, rect) {
                var wrapping = cm.options.lineWrapping;
                var curWidth = wrapping && displayWidth(cm);
                if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {
                    var heights = lineView.measure.heights = [];
                    if (wrapping) {
                        lineView.measure.width = curWidth;
                        var rects = lineView.text.firstChild.getClientRects();
                        for (var i = 0; i < rects.length - 1; i++) {
                            var cur = rects[i], next = rects[i + 1];
                            if (Math.abs(cur.bottom - next.bottom) > 2) {
                                heights.push((cur.bottom + next.top) / 2 - rect.top);
                            }
                        }
                    }
                    heights.push(rect.bottom - rect.top);
                }
            }
            function mapFromLineView(lineView, line, lineN) {
                if (lineView.line == line) {
                    return {
                        map: lineView.measure.map,
                        cache: lineView.measure.cache
                    };
                }
                if (lineView.rest) {
                    for (var i = 0; i < lineView.rest.length; i++) {
                        if (lineView.rest[i] == line) {
                            return {
                                map: lineView.measure.maps[i],
                                cache: lineView.measure.caches[i]
                            };
                        }
                    }
                    for (var i$1 = 0; i$1 < lineView.rest.length; i$1++) {
                        if (lineNo(lineView.rest[i$1]) > lineN) {
                            return {
                                map: lineView.measure.maps[i$1],
                                cache: lineView.measure.caches[i$1],
                                before: true
                            };
                        }
                    }
                }
            }
            function updateExternalMeasurement(cm, line) {
                line = visualLine(line);
                var lineN = lineNo(line);
                var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);
                view.lineN = lineN;
                var built = view.built = buildLineContent(cm, view);
                view.text = built.pre;
                removeChildrenAndAdd(cm.display.lineMeasure, built.pre);
                return view;
            }
            function measureChar(cm, line, ch, bias) {
                return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);
            }
            function findViewForLine(cm, lineN) {
                if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo) {
                    return cm.display.view[findViewIndex(cm, lineN)];
                }
                var ext = cm.display.externalMeasured;
                if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size) {
                    return ext;
                }
            }
            function prepareMeasureForLine(cm, line) {
                var lineN = lineNo(line);
                var view = findViewForLine(cm, lineN);
                if (view && !view.text) {
                    view = null;
                } else if (view && view.changes) {
                    updateLineForChanges(cm, view, lineN, getDimensions(cm));
                    cm.curOp.forceUpdate = true;
                }
                if (!view) {
                    view = updateExternalMeasurement(cm, line);
                }
                var info = mapFromLineView(view, line, lineN);
                return {
                    line: line,
                    view: view,
                    rect: null,
                    map: info.map,
                    cache: info.cache,
                    before: info.before,
                    hasHeights: false
                };
            }
            function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
                if (prepared.before) {
                    ch = -1;
                }
                var key = ch + (bias || ""), found;
                if (prepared.cache.hasOwnProperty(key)) {
                    found = prepared.cache[key];
                } else {
                    if (!prepared.rect) {
                        prepared.rect = prepared.view.text.getBoundingClientRect();
                    }
                    if (!prepared.hasHeights) {
                        ensureLineHeights(cm, prepared.view, prepared.rect);
                        prepared.hasHeights = true;
                    }
                    found = measureCharInner(cm, prepared, ch, bias);
                    if (!found.bogus) {
                        prepared.cache[key] = found;
                    }
                }
                return {
                    left: found.left,
                    right: found.right,
                    top: varHeight ? found.rtop : found.top,
                    bottom: varHeight ? found.rbottom : found.bottom
                };
            }
            var nullRect = {
                left: 0,
                right: 0,
                top: 0,
                bottom: 0
            };
            function nodeAndOffsetInLineMap(map, ch, bias) {
                var node, start, end, collapse, mStart, mEnd;
                for (var i = 0; i < map.length; i += 3) {
                    mStart = map[i];
                    mEnd = map[i + 1];
                    if (ch < mStart) {
                        start = 0;
                        end = 1;
                        collapse = "left";
                    } else if (ch < mEnd) {
                        start = ch - mStart;
                        end = start + 1;
                    } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {
                        end = mEnd - mStart;
                        start = end - 1;
                        if (ch >= mEnd) {
                            collapse = "right";
                        }
                    }
                    if (start != null) {
                        node = map[i + 2];
                        if (mStart == mEnd && bias == (node.insertLeft ? "left" : "right")) {
                            collapse = bias;
                        }
                        if (bias == "left" && start == 0) {
                            while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {
                                node = map[(i -= 3) + 2];
                                collapse = "left";
                            }
                        }
                        if (bias == "right" && start == mEnd - mStart) {
                            while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {
                                node = map[(i += 3) + 2];
                                collapse = "right";
                            }
                        }
                        break;
                    }
                }
                return {
                    node: node,
                    start: start,
                    end: end,
                    collapse: collapse,
                    coverStart: mStart,
                    coverEnd: mEnd
                };
            }
            function getUsefulRect(rects, bias) {
                var rect = nullRect;
                if (bias == "left") {
                    for (var i = 0; i < rects.length; i++) {
                        if ((rect = rects[i]).left != rect.right) {
                            break;
                        }
                    }
                } else {
                    for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {
                        if ((rect = rects[i$1]).left != rect.right) {
                            break;
                        }
                    }
                }
                return rect;
            }
            function measureCharInner(cm, prepared, ch, bias) {
                var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);
                var node = place.node, start = place.start, end = place.end, collapse = place.collapse;
                var rect;
                if (node.nodeType == 3) {
                    for (var i$1 = 0; i$1 < 4; i$1++) {
                        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) {
                            --start;
                        }
                        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) {
                            ++end;
                        }
                        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart) {
                            rect = node.parentNode.getBoundingClientRect();
                        } else {
                            rect = getUsefulRect(range(node, start, end).getClientRects(), bias);
                        }
                        if (rect.left || rect.right || start == 0) {
                            break;
                        }
                        end = start;
                        start = start - 1;
                        collapse = "right";
                    }
                    if (ie && ie_version < 11) {
                        rect = maybeUpdateRectForZooming(cm.display.measure, rect);
                    }
                } else {
                    if (start > 0) {
                        collapse = bias = "right";
                    }
                    var rects;
                    if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1) {
                        rect = rects[bias == "right" ? rects.length - 1 : 0];
                    } else {
                        rect = node.getBoundingClientRect();
                    }
                }
                if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
                    var rSpan = node.parentNode.getClientRects()[0];
                    if (rSpan) {
                        rect = {
                            left: rSpan.left,
                            right: rSpan.left + charWidth(cm.display),
                            top: rSpan.top,
                            bottom: rSpan.bottom
                        };
                    } else {
                        rect = nullRect;
                    }
                }
                var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
                var mid = (rtop + rbot) / 2;
                var heights = prepared.view.measure.heights;
                var i = 0;
                for (; i < heights.length - 1; i++) {
                    if (mid < heights[i]) {
                        break;
                    }
                }
                var top = i ? heights[i - 1] : 0, bot = heights[i];
                var result = {
                    left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
                    right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
                    top: top,
                    bottom: bot
                };
                if (!rect.left && !rect.right) {
                    result.bogus = true;
                }
                if (!cm.options.singleCursorHeightPerLine) {
                    result.rtop = rtop;
                    result.rbottom = rbot;
                }
                return result;
            }
            function maybeUpdateRectForZooming(measure, rect) {
                if (!window.screen || screen.logicalXDPI == null || screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure)) {
                    return rect;
                }
                var scaleX = screen.logicalXDPI / screen.deviceXDPI;
                var scaleY = screen.logicalYDPI / screen.deviceYDPI;
                return {
                    left: rect.left * scaleX,
                    right: rect.right * scaleX,
                    top: rect.top * scaleY,
                    bottom: rect.bottom * scaleY
                };
            }
            function clearLineMeasurementCacheFor(lineView) {
                if (lineView.measure) {
                    lineView.measure.cache = {};
                    lineView.measure.heights = null;
                    if (lineView.rest) {
                        for (var i = 0; i < lineView.rest.length; i++) {
                            lineView.measure.caches[i] = {};
                        }
                    }
                }
            }
            function clearLineMeasurementCache(cm) {
                cm.display.externalMeasure = null;
                removeChildren(cm.display.lineMeasure);
                for (var i = 0; i < cm.display.view.length; i++) {
                    clearLineMeasurementCacheFor(cm.display.view[i]);
                }
            }
            function clearCaches(cm) {
                clearLineMeasurementCache(cm);
                cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;
                if (!cm.options.lineWrapping) {
                    cm.display.maxLineChanged = true;
                }
                cm.display.lineNumChars = null;
            }
            function pageScrollX(doc) {
                if (chrome && android) {
                    return -(doc.body.getBoundingClientRect().left - parseInt(getComputedStyle(doc.body).marginLeft));
                }
                return doc.defaultView.pageXOffset || (doc.documentElement || doc.body).scrollLeft;
            }
            function pageScrollY(doc) {
                if (chrome && android) {
                    return -(doc.body.getBoundingClientRect().top - parseInt(getComputedStyle(doc.body).marginTop));
                }
                return doc.defaultView.pageYOffset || (doc.documentElement || doc.body).scrollTop;
            }
            function widgetTopHeight(lineObj) {
                var ref = visualLine(lineObj);
                var widgets = ref.widgets;
                var height = 0;
                if (widgets) {
                    for (var i = 0; i < widgets.length; ++i) {
                        if (widgets[i].above) {
                            height += widgetHeight(widgets[i]);
                        }
                    }
                }
                return height;
            }
            function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {
                if (!includeWidgets) {
                    var height = widgetTopHeight(lineObj);
                    rect.top += height;
                    rect.bottom += height;
                }
                if (context == "line") {
                    return rect;
                }
                if (!context) {
                    context = "local";
                }
                var yOff = heightAtLine(lineObj);
                if (context == "local") {
                    yOff += paddingTop(cm.display);
                } else {
                    yOff -= cm.display.viewOffset;
                }
                if (context == "page" || context == "window") {
                    var lOff = cm.display.lineSpace.getBoundingClientRect();
                    yOff += lOff.top + (context == "window" ? 0 : pageScrollY(doc(cm)));
                    var xOff = lOff.left + (context == "window" ? 0 : pageScrollX(doc(cm)));
                    rect.left += xOff;
                    rect.right += xOff;
                }
                rect.top += yOff;
                rect.bottom += yOff;
                return rect;
            }
            function fromCoordSystem(cm, coords, context) {
                if (context == "div") {
                    return coords;
                }
                var left = coords.left, top = coords.top;
                if (context == "page") {
                    left -= pageScrollX(doc(cm));
                    top -= pageScrollY(doc(cm));
                } else if (context == "local" || !context) {
                    var localBox = cm.display.sizer.getBoundingClientRect();
                    left += localBox.left;
                    top += localBox.top;
                }
                var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();
                return {
                    left: left - lineSpaceBox.left,
                    top: top - lineSpaceBox.top
                };
            }
            function charCoords(cm, pos, context, lineObj, bias) {
                if (!lineObj) {
                    lineObj = getLine(cm.doc, pos.line);
                }
                return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context);
            }
            function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
                lineObj = lineObj || getLine(cm.doc, pos.line);
                if (!preparedMeasure) {
                    preparedMeasure = prepareMeasureForLine(cm, lineObj);
                }
                function get(ch, right) {
                    var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
                    if (right) {
                        m.left = m.right;
                    } else {
                        m.right = m.left;
                    }
                    return intoCoordSystem(cm, lineObj, m, context);
                }
                var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;
                if (ch >= lineObj.text.length) {
                    ch = lineObj.text.length;
                    sticky = "before";
                } else if (ch <= 0) {
                    ch = 0;
                    sticky = "after";
                }
                if (!order) {
                    return get(sticky == "before" ? ch - 1 : ch, sticky == "before");
                }
                function getBidi(ch, partPos, invert) {
                    var part = order[partPos], right = part.level == 1;
                    return get(invert ? ch - 1 : ch, right != invert);
                }
                var partPos = getBidiPartAt(order, ch, sticky);
                var other = bidiOther;
                var val = getBidi(ch, partPos, sticky == "before");
                if (other != null) {
                    val.other = getBidi(ch, other, sticky != "before");
                }
                return val;
            }
            function estimateCoords(cm, pos) {
                var left = 0;
                pos = clipPos(cm.doc, pos);
                if (!cm.options.lineWrapping) {
                    left = charWidth(cm.display) * pos.ch;
                }
                var lineObj = getLine(cm.doc, pos.line);
                var top = heightAtLine(lineObj) + paddingTop(cm.display);
                return {
                    left: left,
                    right: left,
                    top: top,
                    bottom: top + lineObj.height
                };
            }
            function PosWithInfo(line, ch, sticky, outside, xRel) {
                var pos = Pos(line, ch, sticky);
                pos.xRel = xRel;
                if (outside) {
                    pos.outside = outside;
                }
                return pos;
            }
            function coordsChar(cm, x, y) {
                var doc = cm.doc;
                y += cm.display.viewOffset;
                if (y < 0) {
                    return PosWithInfo(doc.first, 0, null, -1, -1);
                }
                var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;
                if (lineN > last) {
                    return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1);
                }
                if (x < 0) {
                    x = 0;
                }
                var lineObj = getLine(doc, lineN);
                for (; ; ) {
                    var found = coordsCharInner(cm, lineObj, lineN, x, y);
                    var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));
                    if (!collapsed) {
                        return found;
                    }
                    var rangeEnd = collapsed.find(1);
                    if (rangeEnd.line == lineN) {
                        return rangeEnd;
                    }
                    lineObj = getLine(doc, lineN = rangeEnd.line);
                }
            }
            function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {
                y -= widgetTopHeight(lineObj);
                var end = lineObj.text.length;
                var begin = findFirst(function (ch) {
                    return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y;
                }, end, 0);
                end = findFirst(function (ch) {
                    return measureCharPrepared(cm, preparedMeasure, ch).top > y;
                }, begin, end);
                return {
                    begin: begin,
                    end: end
                };
            }
            function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {
                if (!preparedMeasure) {
                    preparedMeasure = prepareMeasureForLine(cm, lineObj);
                }
                var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), "line").top;
                return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop);
            }
            function boxIsAfter(box, x, y, left) {
                return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x;
            }
            function coordsCharInner(cm, lineObj, lineNo, x, y) {
                y -= heightAtLine(lineObj);
                var preparedMeasure = prepareMeasureForLine(cm, lineObj);
                var widgetHeight = widgetTopHeight(lineObj);
                var begin = 0, end = lineObj.text.length, ltr = true;
                var order = getOrder(lineObj, cm.doc.direction);
                if (order) {
                    var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)(cm, lineObj, lineNo, preparedMeasure, order, x, y);
                    ltr = part.level != 1;
                    begin = ltr ? part.from : part.to - 1;
                    end = ltr ? part.to : part.from - 1;
                }
                var chAround = null, boxAround = null;
                var ch = findFirst(function (ch) {
                    var box = measureCharPrepared(cm, preparedMeasure, ch);
                    box.top += widgetHeight;
                    box.bottom += widgetHeight;
                    if (!boxIsAfter(box, x, y, false)) {
                        return false;
                    }
                    if (box.top <= y && box.left <= x) {
                        chAround = ch;
                        boxAround = box;
                    }
                    return true;
                }, begin, end);
                var baseX, sticky, outside = false;
                if (boxAround) {
                    var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;
                    ch = chAround + (atStart ? 0 : 1);
                    sticky = atStart ? "after" : "before";
                    baseX = atLeft ? boxAround.left : boxAround.right;
                } else {
                    if (!ltr && (ch == end || ch == begin)) {
                        ch++;
                    }
                    sticky = ch == 0 ? "after" : ch == lineObj.text.length ? "before" : measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y == ltr ? "after" : "before";
                    var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), "line", lineObj, preparedMeasure);
                    baseX = coords.left;
                    outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;
                }
                ch = skipExtendingChars(lineObj.text, ch, 1);
                return PosWithInfo(lineNo, ch, sticky, outside, x - baseX);
            }
            function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {
                var index = findFirst(function (i) {
                    var part = order[i], ltr = part.level != 1;
                    return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? "before" : "after"), "line", lineObj, preparedMeasure), x, y, true);
                }, 0, order.length - 1);
                var part = order[index];
                if (index > 0) {
                    var ltr = part.level != 1;
                    var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? "after" : "before"), "line", lineObj, preparedMeasure);
                    if (boxIsAfter(start, x, y, true) && start.top > y) {
                        part = order[index - 1];
                    }
                }
                return part;
            }
            function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {
                var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);
                var begin = ref.begin;
                var end = ref.end;
                if ((/\s/).test(lineObj.text.charAt(end - 1))) {
                    end--;
                }
                var part = null, closestDist = null;
                for (var i = 0; i < order.length; i++) {
                    var p = order[i];
                    if (p.from >= end || p.to <= begin) {
                        continue;
                    }
                    var ltr = p.level != 1;
                    var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;
                    var dist = endX < x ? x - endX + 1e9 : endX - x;
                    if (!part || closestDist > dist) {
                        part = p;
                        closestDist = dist;
                    }
                }
                if (!part) {
                    part = order[order.length - 1];
                }
                if (part.from < begin) {
                    part = {
                        from: begin,
                        to: part.to,
                        level: part.level
                    };
                }
                if (part.to > end) {
                    part = {
                        from: part.from,
                        to: end,
                        level: part.level
                    };
                }
                return part;
            }
            var measureText;
            function textHeight(display) {
                if (display.cachedTextHeight != null) {
                    return display.cachedTextHeight;
                }
                if (measureText == null) {
                    measureText = elt("pre", null, "CodeMirror-line-like");
                    for (var i = 0; i < 49; ++i) {
                        measureText.appendChild(document.createTextNode("x"));
                        measureText.appendChild(elt("br"));
                    }
                    measureText.appendChild(document.createTextNode("x"));
                }
                removeChildrenAndAdd(display.measure, measureText);
                var height = measureText.offsetHeight / 50;
                if (height > 3) {
                    display.cachedTextHeight = height;
                }
                removeChildren(display.measure);
                return height || 1;
            }
            function charWidth(display) {
                if (display.cachedCharWidth != null) {
                    return display.cachedCharWidth;
                }
                var anchor = elt("span", "xxxxxxxxxx");
                var pre = elt("pre", [anchor], "CodeMirror-line-like");
                removeChildrenAndAdd(display.measure, pre);
                var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;
                if (width > 2) {
                    display.cachedCharWidth = width;
                }
                return width || 10;
            }
            function getDimensions(cm) {
                var d = cm.display, left = {}, width = {};
                var gutterLeft = d.gutters.clientLeft;
                for (var n = d.gutters.firstChild, i = 0; n; (n = n.nextSibling, ++i)) {
                    var id = cm.display.gutterSpecs[i].className;
                    left[id] = n.offsetLeft + n.clientLeft + gutterLeft;
                    width[id] = n.clientWidth;
                }
                return {
                    fixedPos: compensateForHScroll(d),
                    gutterTotalWidth: d.gutters.offsetWidth,
                    gutterLeft: left,
                    gutterWidth: width,
                    wrapperWidth: d.wrapper.clientWidth
                };
            }
            function compensateForHScroll(display) {
                return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;
            }
            function estimateHeight(cm) {
                var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;
                var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);
                return function (line) {
                    if (lineIsHidden(cm.doc, line)) {
                        return 0;
                    }
                    var widgetsHeight = 0;
                    if (line.widgets) {
                        for (var i = 0; i < line.widgets.length; i++) {
                            if (line.widgets[i].height) {
                                widgetsHeight += line.widgets[i].height;
                            }
                        }
                    }
                    if (wrapping) {
                        return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;
                    } else {
                        return widgetsHeight + th;
                    }
                };
            }
            function estimateLineHeights(cm) {
                var doc = cm.doc, est = estimateHeight(cm);
                doc.iter(function (line) {
                    var estHeight = est(line);
                    if (estHeight != line.height) {
                        updateLineHeight(line, estHeight);
                    }
                });
            }
            function posFromMouse(cm, e, liberal, forRect) {
                var display = cm.display;
                if (!liberal && e_target(e).getAttribute("cm-not-content") == "true") {
                    return null;
                }
                var x, y, space = display.lineSpace.getBoundingClientRect();
                try {
                    x = e.clientX - space.left;
                    y = e.clientY - space.top;
                } catch (e$1) {
                    return null;
                }
                var coords = coordsChar(cm, x, y), line;
                if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {
                    var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;
                    coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));
                }
                return coords;
            }
            function findViewIndex(cm, n) {
                if (n >= cm.display.viewTo) {
                    return null;
                }
                n -= cm.display.viewFrom;
                if (n < 0) {
                    return null;
                }
                var view = cm.display.view;
                for (var i = 0; i < view.length; i++) {
                    n -= view[i].size;
                    if (n < 0) {
                        return i;
                    }
                }
            }
            function regChange(cm, from, to, lendiff) {
                if (from == null) {
                    from = cm.doc.first;
                }
                if (to == null) {
                    to = cm.doc.first + cm.doc.size;
                }
                if (!lendiff) {
                    lendiff = 0;
                }
                var display = cm.display;
                if (lendiff && to < display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers > from)) {
                    display.updateLineNumbers = from;
                }
                cm.curOp.viewChanged = true;
                if (from >= display.viewTo) {
                    if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo) {
                        resetView(cm);
                    }
                } else if (to <= display.viewFrom) {
                    if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {
                        resetView(cm);
                    } else {
                        display.viewFrom += lendiff;
                        display.viewTo += lendiff;
                    }
                } else if (from <= display.viewFrom && to >= display.viewTo) {
                    resetView(cm);
                } else if (from <= display.viewFrom) {
                    var cut = viewCuttingPoint(cm, to, to + lendiff, 1);
                    if (cut) {
                        display.view = display.view.slice(cut.index);
                        display.viewFrom = cut.lineN;
                        display.viewTo += lendiff;
                    } else {
                        resetView(cm);
                    }
                } else if (to >= display.viewTo) {
                    var cut$1 = viewCuttingPoint(cm, from, from, -1);
                    if (cut$1) {
                        display.view = display.view.slice(0, cut$1.index);
                        display.viewTo = cut$1.lineN;
                    } else {
                        resetView(cm);
                    }
                } else {
                    var cutTop = viewCuttingPoint(cm, from, from, -1);
                    var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);
                    if (cutTop && cutBot) {
                        display.view = display.view.slice(0, cutTop.index).concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN)).concat(display.view.slice(cutBot.index));
                        display.viewTo += lendiff;
                    } else {
                        resetView(cm);
                    }
                }
                var ext = display.externalMeasured;
                if (ext) {
                    if (to < ext.lineN) {
                        ext.lineN += lendiff;
                    } else if (from < ext.lineN + ext.size) {
                        display.externalMeasured = null;
                    }
                }
            }
            function regLineChange(cm, line, type) {
                cm.curOp.viewChanged = true;
                var display = cm.display, ext = cm.display.externalMeasured;
                if (ext && line >= ext.lineN && line < ext.lineN + ext.size) {
                    display.externalMeasured = null;
                }
                if (line < display.viewFrom || line >= display.viewTo) {
                    return;
                }
                var lineView = display.view[findViewIndex(cm, line)];
                if (lineView.node == null) {
                    return;
                }
                var arr = lineView.changes || (lineView.changes = []);
                if (indexOf(arr, type) == -1) {
                    arr.push(type);
                }
            }
            function resetView(cm) {
                cm.display.viewFrom = cm.display.viewTo = cm.doc.first;
                cm.display.view = [];
                cm.display.viewOffset = 0;
            }
            function viewCuttingPoint(cm, oldN, newN, dir) {
                var index = findViewIndex(cm, oldN), diff, view = cm.display.view;
                if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size) {
                    return {
                        index: index,
                        lineN: newN
                    };
                }
                var n = cm.display.viewFrom;
                for (var i = 0; i < index; i++) {
                    n += view[i].size;
                }
                if (n != oldN) {
                    if (dir > 0) {
                        if (index == view.length - 1) {
                            return null;
                        }
                        diff = n + view[index].size - oldN;
                        index++;
                    } else {
                        diff = n - oldN;
                    }
                    oldN += diff;
                    newN += diff;
                }
                while (visualLineNo(cm.doc, newN) != newN) {
                    if (index == (dir < 0 ? 0 : view.length - 1)) {
                        return null;
                    }
                    newN += dir * view[index - (dir < 0 ? 1 : 0)].size;
                    index += dir;
                }
                return {
                    index: index,
                    lineN: newN
                };
            }
            function adjustView(cm, from, to) {
                var display = cm.display, view = display.view;
                if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {
                    display.view = buildViewArray(cm, from, to);
                    display.viewFrom = from;
                } else {
                    if (display.viewFrom > from) {
                        display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);
                    } else if (display.viewFrom < from) {
                        display.view = display.view.slice(findViewIndex(cm, from));
                    }
                    display.viewFrom = from;
                    if (display.viewTo < to) {
                        display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));
                    } else if (display.viewTo > to) {
                        display.view = display.view.slice(0, findViewIndex(cm, to));
                    }
                }
                display.viewTo = to;
            }
            function countDirtyView(cm) {
                var view = cm.display.view, dirty = 0;
                for (var i = 0; i < view.length; i++) {
                    var lineView = view[i];
                    if (!lineView.hidden && (!lineView.node || lineView.changes)) {
                        ++dirty;
                    }
                }
                return dirty;
            }
            function updateSelection(cm) {
                cm.display.input.showSelection(cm.display.input.prepareSelection());
            }
            function prepareSelection(cm, primary) {
                if (primary === void 0) primary = true;
                var doc = cm.doc, result = {};
                var curFragment = result.cursors = document.createDocumentFragment();
                var selFragment = result.selection = document.createDocumentFragment();
                var customCursor = cm.options.$customCursor;
                if (customCursor) {
                    primary = true;
                }
                for (var i = 0; i < doc.sel.ranges.length; i++) {
                    if (!primary && i == doc.sel.primIndex) {
                        continue;
                    }
                    var range = doc.sel.ranges[i];
                    if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) {
                        continue;
                    }
                    var collapsed = range.empty();
                    if (customCursor) {
                        var head = customCursor(cm, range);
                        if (head) {
                            drawSelectionCursor(cm, head, curFragment);
                        }
                    } else if (collapsed || cm.options.showCursorWhenSelecting) {
                        drawSelectionCursor(cm, range.head, curFragment);
                    }
                    if (!collapsed) {
                        drawSelectionRange(cm, range, selFragment);
                    }
                }
                return result;
            }
            function drawSelectionCursor(cm, head, output) {
                var pos = cursorCoords(cm, head, "div", null, null, !cm.options.singleCursorHeightPerLine);
                var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
                cursor.style.left = pos.left + "px";
                cursor.style.top = pos.top + "px";
                cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + "px";
                if ((/\bcm-fat-cursor\b/).test(cm.getWrapperElement().className)) {
                    var charPos = charCoords(cm, head, "div", null, null);
                    var width = charPos.right - charPos.left;
                    cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + "px";
                }
                if (pos.other) {
                    var otherCursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor CodeMirror-secondarycursor"));
                    otherCursor.style.display = "";
                    otherCursor.style.left = pos.other.left + "px";
                    otherCursor.style.top = pos.other.top + "px";
                    otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + "px";
                }
            }
            function cmpCoords(a, b) {
                return a.top - b.top || a.left - b.left;
            }
            function drawSelectionRange(cm, range, output) {
                var display = cm.display, doc = cm.doc;
                var fragment = document.createDocumentFragment();
                var padding = paddingH(cm.display), leftSide = padding.left;
                var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;
                var docLTR = doc.direction == "ltr";
                function add(left, top, width, bottom) {
                    if (top < 0) {
                        top = 0;
                    }
                    top = Math.round(top);
                    bottom = Math.round(bottom);
                    fragment.appendChild(elt("div", null, "CodeMirror-selected", "position: absolute; left: " + left + "px;\n                             top: " + top + "px; width: " + (width == null ? rightSide - left : width) + "px;\n                             height: " + (bottom - top) + "px"));
                }
                function drawForLine(line, fromArg, toArg) {
                    var lineObj = getLine(doc, line);
                    var lineLen = lineObj.text.length;
                    var start, end;
                    function coords(ch, bias) {
                        return charCoords(cm, Pos(line, ch), "div", lineObj, bias);
                    }
                    function wrapX(pos, dir, side) {
                        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);
                        var prop = dir == "ltr" == (side == "after") ? "left" : "right";
                        var ch = side == "after" ? extent.begin : extent.end - ((/\s/).test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);
                        return coords(ch, prop)[prop];
                    }
                    var order = getOrder(lineObj, doc.direction);
                    iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {
                        var ltr = dir == "ltr";
                        var fromPos = coords(from, ltr ? "left" : "right");
                        var toPos = coords(to - 1, ltr ? "right" : "left");
                        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;
                        var first = i == 0, last = !order || i == order.length - 1;
                        if (toPos.top - fromPos.top <= 3) {
                            var openLeft = (docLTR ? openStart : openEnd) && first;
                            var openRight = (docLTR ? openEnd : openStart) && last;
                            var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;
                            var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;
                            add(left, fromPos.top, right - left, fromPos.bottom);
                        } else {
                            var topLeft, topRight, botLeft, botRight;
                            if (ltr) {
                                topLeft = docLTR && openStart && first ? leftSide : fromPos.left;
                                topRight = docLTR ? rightSide : wrapX(from, dir, "before");
                                botLeft = docLTR ? leftSide : wrapX(to, dir, "after");
                                botRight = docLTR && openEnd && last ? rightSide : toPos.right;
                            } else {
                                topLeft = !docLTR ? leftSide : wrapX(from, dir, "before");
                                topRight = !docLTR && openStart && first ? rightSide : fromPos.right;
                                botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;
                                botRight = !docLTR ? rightSide : wrapX(to, dir, "after");
                            }
                            add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);
                            if (fromPos.bottom < toPos.top) {
                                add(leftSide, fromPos.bottom, null, toPos.top);
                            }
                            add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);
                        }
                        if (!start || cmpCoords(fromPos, start) < 0) {
                            start = fromPos;
                        }
                        if (cmpCoords(toPos, start) < 0) {
                            start = toPos;
                        }
                        if (!end || cmpCoords(fromPos, end) < 0) {
                            end = fromPos;
                        }
                        if (cmpCoords(toPos, end) < 0) {
                            end = toPos;
                        }
                    });
                    return {
                        start: start,
                        end: end
                    };
                }
                var sFrom = range.from(), sTo = range.to();
                if (sFrom.line == sTo.line) {
                    drawForLine(sFrom.line, sFrom.ch, sTo.ch);
                } else {
                    var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);
                    var singleVLine = visualLine(fromLine) == visualLine(toLine);
                    var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;
                    var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;
                    if (singleVLine) {
                        if (leftEnd.top < rightStart.top - 2) {
                            add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);
                            add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);
                        } else {
                            add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);
                        }
                    }
                    if (leftEnd.bottom < rightStart.top) {
                        add(leftSide, leftEnd.bottom, null, rightStart.top);
                    }
                }
                output.appendChild(fragment);
            }
            function restartBlink(cm) {
                if (!cm.state.focused) {
                    return;
                }
                var display = cm.display;
                clearInterval(display.blinker);
                var on = true;
                display.cursorDiv.style.visibility = "";
                if (cm.options.cursorBlinkRate > 0) {
                    display.blinker = setInterval(function () {
                        if (!cm.hasFocus()) {
                            onBlur(cm);
                        }
                        display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
                    }, cm.options.cursorBlinkRate);
                } else if (cm.options.cursorBlinkRate < 0) {
                    display.cursorDiv.style.visibility = "hidden";
                }
            }
            function ensureFocus(cm) {
                if (!cm.hasFocus()) {
                    cm.display.input.focus();
                    if (!cm.state.focused) {
                        onFocus(cm);
                    }
                }
            }
            function delayBlurEvent(cm) {
                cm.state.delayingBlurEvent = true;
                setTimeout(function () {
                    if (cm.state.delayingBlurEvent) {
                        cm.state.delayingBlurEvent = false;
                        if (cm.state.focused) {
                            onBlur(cm);
                        }
                    }
                }, 100);
            }
            function onFocus(cm, e) {
                if (cm.state.delayingBlurEvent && !cm.state.draggingText) {
                    cm.state.delayingBlurEvent = false;
                }
                if (cm.options.readOnly == "nocursor") {
                    return;
                }
                if (!cm.state.focused) {
                    signal(cm, "focus", cm, e);
                    cm.state.focused = true;
                    addClass(cm.display.wrapper, "CodeMirror-focused");
                    if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {
                        cm.display.input.reset();
                        if (webkit) {
                            setTimeout(function () {
                                return cm.display.input.reset(true);
                            }, 20);
                        }
                    }
                    cm.display.input.receivedFocus();
                }
                restartBlink(cm);
            }
            function onBlur(cm, e) {
                if (cm.state.delayingBlurEvent) {
                    return;
                }
                if (cm.state.focused) {
                    signal(cm, "blur", cm, e);
                    cm.state.focused = false;
                    rmClass(cm.display.wrapper, "CodeMirror-focused");
                }
                clearInterval(cm.display.blinker);
                setTimeout(function () {
                    if (!cm.state.focused) {
                        cm.display.shift = false;
                    }
                }, 150);
            }
            function updateHeightsInViewport(cm) {
                var display = cm.display;
                var prevBottom = display.lineDiv.offsetTop;
                var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);
                var oldHeight = display.lineDiv.getBoundingClientRect().top;
                var mustScroll = 0;
                for (var i = 0; i < display.view.length; i++) {
                    var cur = display.view[i], wrapping = cm.options.lineWrapping;
                    var height = void 0, width = 0;
                    if (cur.hidden) {
                        continue;
                    }
                    oldHeight += cur.line.height;
                    if (ie && ie_version < 8) {
                        var bot = cur.node.offsetTop + cur.node.offsetHeight;
                        height = bot - prevBottom;
                        prevBottom = bot;
                    } else {
                        var box = cur.node.getBoundingClientRect();
                        height = box.bottom - box.top;
                        if (!wrapping && cur.text.firstChild) {
                            width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1;
                        }
                    }
                    var diff = cur.line.height - height;
                    if (diff > .005 || diff < -.005) {
                        if (oldHeight < viewTop) {
                            mustScroll -= diff;
                        }
                        updateLineHeight(cur.line, height);
                        updateWidgetHeight(cur.line);
                        if (cur.rest) {
                            for (var j = 0; j < cur.rest.length; j++) {
                                updateWidgetHeight(cur.rest[j]);
                            }
                        }
                    }
                    if (width > cm.display.sizerWidth) {
                        var chWidth = Math.ceil(width / charWidth(cm.display));
                        if (chWidth > cm.display.maxLineLength) {
                            cm.display.maxLineLength = chWidth;
                            cm.display.maxLine = cur.line;
                            cm.display.maxLineChanged = true;
                        }
                    }
                }
                if (Math.abs(mustScroll) > 2) {
                    display.scroller.scrollTop += mustScroll;
                }
            }
            function updateWidgetHeight(line) {
                if (line.widgets) {
                    for (var i = 0; i < line.widgets.length; ++i) {
                        var w = line.widgets[i], parent = w.node.parentNode;
                        if (parent) {
                            w.height = parent.offsetHeight;
                        }
                    }
                }
            }
            function visibleLines(display, doc, viewport) {
                var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;
                top = Math.floor(top - paddingTop(display));
                var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;
                var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);
                if (viewport && viewport.ensure) {
                    var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;
                    if (ensureFrom < from) {
                        from = ensureFrom;
                        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);
                    } else if (Math.min(ensureTo, doc.lastLine()) >= to) {
                        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);
                        to = ensureTo;
                    }
                }
                return {
                    from: from,
                    to: Math.max(to, from + 1)
                };
            }
            function maybeScrollWindow(cm, rect) {
                if (signalDOMEvent(cm, "scrollCursorIntoView")) {
                    return;
                }
                var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;
                var doc = display.wrapper.ownerDocument;
                if (rect.top + box.top < 0) {
                    doScroll = true;
                } else if (rect.bottom + box.top > (doc.defaultView.innerHeight || doc.documentElement.clientHeight)) {
                    doScroll = false;
                }
                if (doScroll != null && !phantom) {
                    var scrollNode = elt("div", "\u200b", null, "position: absolute;\n                         top: " + (rect.top - display.viewOffset - paddingTop(cm.display)) + "px;\n                         height: " + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + "px;\n                         left: " + rect.left + "px; width: " + Math.max(2, rect.right - rect.left) + "px;");
                    cm.display.lineSpace.appendChild(scrollNode);
                    scrollNode.scrollIntoView(doScroll);
                    cm.display.lineSpace.removeChild(scrollNode);
                }
            }
            function scrollPosIntoView(cm, pos, end, margin) {
                if (margin == null) {
                    margin = 0;
                }
                var rect;
                if (!cm.options.lineWrapping && pos == end) {
                    end = pos.sticky == "before" ? Pos(pos.line, pos.ch + 1, "before") : pos;
                    pos = pos.ch ? Pos(pos.line, pos.sticky == "before" ? pos.ch - 1 : pos.ch, "after") : pos;
                }
                for (var limit = 0; limit < 5; limit++) {
                    var changed = false;
                    var coords = cursorCoords(cm, pos);
                    var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);
                    rect = {
                        left: Math.min(coords.left, endCoords.left),
                        top: Math.min(coords.top, endCoords.top) - margin,
                        right: Math.max(coords.left, endCoords.left),
                        bottom: Math.max(coords.bottom, endCoords.bottom) + margin
                    };
                    var scrollPos = calculateScrollPos(cm, rect);
                    var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;
                    if (scrollPos.scrollTop != null) {
                        updateScrollTop(cm, scrollPos.scrollTop);
                        if (Math.abs(cm.doc.scrollTop - startTop) > 1) {
                            changed = true;
                        }
                    }
                    if (scrollPos.scrollLeft != null) {
                        setScrollLeft(cm, scrollPos.scrollLeft);
                        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) {
                            changed = true;
                        }
                    }
                    if (!changed) {
                        break;
                    }
                }
                return rect;
            }
            function scrollIntoView(cm, rect) {
                var scrollPos = calculateScrollPos(cm, rect);
                if (scrollPos.scrollTop != null) {
                    updateScrollTop(cm, scrollPos.scrollTop);
                }
                if (scrollPos.scrollLeft != null) {
                    setScrollLeft(cm, scrollPos.scrollLeft);
                }
            }
            function calculateScrollPos(cm, rect) {
                var display = cm.display, snapMargin = textHeight(cm.display);
                if (rect.top < 0) {
                    rect.top = 0;
                }
                var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;
                var screen = displayHeight(cm), result = {};
                if (rect.bottom - rect.top > screen) {
                    rect.bottom = rect.top + screen;
                }
                var docBottom = cm.doc.height + paddingVert(display);
                var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;
                if (rect.top < screentop) {
                    result.scrollTop = atTop ? 0 : rect.top;
                } else if (rect.bottom > screentop + screen) {
                    var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);
                    if (newTop != screentop) {
                        result.scrollTop = newTop;
                    }
                }
                var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;
                var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;
                var screenw = displayWidth(cm) - display.gutters.offsetWidth;
                var tooWide = rect.right - rect.left > screenw;
                if (tooWide) {
                    rect.right = rect.left + screenw;
                }
                if (rect.left < 10) {
                    result.scrollLeft = 0;
                } else if (rect.left < screenleft) {
                    result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10));
                } else if (rect.right > screenw + screenleft - 3) {
                    result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw;
                }
                return result;
            }
            function addToScrollTop(cm, top) {
                if (top == null) {
                    return;
                }
                resolveScrollToPos(cm);
                cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;
            }
            function ensureCursorVisible(cm) {
                resolveScrollToPos(cm);
                var cur = cm.getCursor();
                cm.curOp.scrollToPos = {
                    from: cur,
                    to: cur,
                    margin: cm.options.cursorScrollMargin
                };
            }
            function scrollToCoords(cm, x, y) {
                if (x != null || y != null) {
                    resolveScrollToPos(cm);
                }
                if (x != null) {
                    cm.curOp.scrollLeft = x;
                }
                if (y != null) {
                    cm.curOp.scrollTop = y;
                }
            }
            function scrollToRange(cm, range) {
                resolveScrollToPos(cm);
                cm.curOp.scrollToPos = range;
            }
            function resolveScrollToPos(cm) {
                var range = cm.curOp.scrollToPos;
                if (range) {
                    cm.curOp.scrollToPos = null;
                    var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);
                    scrollToCoordsRange(cm, from, to, range.margin);
                }
            }
            function scrollToCoordsRange(cm, from, to, margin) {
                var sPos = calculateScrollPos(cm, {
                    left: Math.min(from.left, to.left),
                    top: Math.min(from.top, to.top) - margin,
                    right: Math.max(from.right, to.right),
                    bottom: Math.max(from.bottom, to.bottom) + margin
                });
                scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);
            }
            function updateScrollTop(cm, val) {
                if (Math.abs(cm.doc.scrollTop - val) < 2) {
                    return;
                }
                if (!gecko) {
                    updateDisplaySimple(cm, {
                        top: val
                    });
                }
                setScrollTop(cm, val, true);
                if (gecko) {
                    updateDisplaySimple(cm);
                }
                startWorker(cm, 100);
            }
            function setScrollTop(cm, val, forceScroll) {
                val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));
                if (cm.display.scroller.scrollTop == val && !forceScroll) {
                    return;
                }
                cm.doc.scrollTop = val;
                cm.display.scrollbars.setScrollTop(val);
                if (cm.display.scroller.scrollTop != val) {
                    cm.display.scroller.scrollTop = val;
                }
            }
            function setScrollLeft(cm, val, isScroller, forceScroll) {
                val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));
                if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) {
                    return;
                }
                cm.doc.scrollLeft = val;
                alignHorizontally(cm);
                if (cm.display.scroller.scrollLeft != val) {
                    cm.display.scroller.scrollLeft = val;
                }
                cm.display.scrollbars.setScrollLeft(val);
            }
            function measureForScrollbars(cm) {
                var d = cm.display, gutterW = d.gutters.offsetWidth;
                var docH = Math.round(cm.doc.height + paddingVert(cm.display));
                return {
                    clientHeight: d.scroller.clientHeight,
                    viewHeight: d.wrapper.clientHeight,
                    scrollWidth: d.scroller.scrollWidth,
                    clientWidth: d.scroller.clientWidth,
                    viewWidth: d.wrapper.clientWidth,
                    barLeft: cm.options.fixedGutter ? gutterW : 0,
                    docHeight: docH,
                    scrollHeight: docH + scrollGap(cm) + d.barHeight,
                    nativeBarWidth: d.nativeBarWidth,
                    gutterWidth: gutterW
                };
            }
            var NativeScrollbars = function (place, scroll, cm) {
                this.cm = cm;
                var vert = this.vert = elt("div", [elt("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar");
                var horiz = this.horiz = elt("div", [elt("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar");
                vert.tabIndex = horiz.tabIndex = -1;
                place(vert);
                place(horiz);
                on(vert, "scroll", function () {
                    if (vert.clientHeight) {
                        scroll(vert.scrollTop, "vertical");
                    }
                });
                on(horiz, "scroll", function () {
                    if (horiz.clientWidth) {
                        scroll(horiz.scrollLeft, "horizontal");
                    }
                });
                this.checkedZeroWidth = false;
                if (ie && ie_version < 8) {
                    this.horiz.style.minHeight = this.vert.style.minWidth = "18px";
                }
            };
            NativeScrollbars.prototype.update = function (measure) {
                var needsH = measure.scrollWidth > measure.clientWidth + 1;
                var needsV = measure.scrollHeight > measure.clientHeight + 1;
                var sWidth = measure.nativeBarWidth;
                if (needsV) {
                    this.vert.style.display = "block";
                    this.vert.style.bottom = needsH ? sWidth + "px" : "0";
                    var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);
                    this.vert.firstChild.style.height = Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + "px";
                } else {
                    this.vert.scrollTop = 0;
                    this.vert.style.display = "";
                    this.vert.firstChild.style.height = "0";
                }
                if (needsH) {
                    this.horiz.style.display = "block";
                    this.horiz.style.right = needsV ? sWidth + "px" : "0";
                    this.horiz.style.left = measure.barLeft + "px";
                    var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);
                    this.horiz.firstChild.style.width = Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + "px";
                } else {
                    this.horiz.style.display = "";
                    this.horiz.firstChild.style.width = "0";
                }
                if (!this.checkedZeroWidth && measure.clientHeight > 0) {
                    if (sWidth == 0) {
                        this.zeroWidthHack();
                    }
                    this.checkedZeroWidth = true;
                }
                return {
                    right: needsV ? sWidth : 0,
                    bottom: needsH ? sWidth : 0
                };
            };
            NativeScrollbars.prototype.setScrollLeft = function (pos) {
                if (this.horiz.scrollLeft != pos) {
                    this.horiz.scrollLeft = pos;
                }
                if (this.disableHoriz) {
                    this.enableZeroWidthBar(this.horiz, this.disableHoriz, "horiz");
                }
            };
            NativeScrollbars.prototype.setScrollTop = function (pos) {
                if (this.vert.scrollTop != pos) {
                    this.vert.scrollTop = pos;
                }
                if (this.disableVert) {
                    this.enableZeroWidthBar(this.vert, this.disableVert, "vert");
                }
            };
            NativeScrollbars.prototype.zeroWidthHack = function () {
                var w = mac && !mac_geMountainLion ? "12px" : "18px";
                this.horiz.style.height = this.vert.style.width = w;
                this.horiz.style.visibility = this.vert.style.visibility = "hidden";
                this.disableHoriz = new Delayed();
                this.disableVert = new Delayed();
            };
            NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {
                bar.style.visibility = "";
                function maybeDisable() {
                    var box = bar.getBoundingClientRect();
                    var elt = type == "vert" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2) : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);
                    if (elt != bar) {
                        bar.style.visibility = "hidden";
                    } else {
                        delay.set(1000, maybeDisable);
                    }
                }
                delay.set(1000, maybeDisable);
            };
            NativeScrollbars.prototype.clear = function () {
                var parent = this.horiz.parentNode;
                parent.removeChild(this.horiz);
                parent.removeChild(this.vert);
            };
            var NullScrollbars = function () {};
            NullScrollbars.prototype.update = function () {
                return {
                    bottom: 0,
                    right: 0
                };
            };
            NullScrollbars.prototype.setScrollLeft = function () {};
            NullScrollbars.prototype.setScrollTop = function () {};
            NullScrollbars.prototype.clear = function () {};
            function updateScrollbars(cm, measure) {
                if (!measure) {
                    measure = measureForScrollbars(cm);
                }
                var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;
                updateScrollbarsInner(cm, measure);
                for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {
                    if (startWidth != cm.display.barWidth && cm.options.lineWrapping) {
                        updateHeightsInViewport(cm);
                    }
                    updateScrollbarsInner(cm, measureForScrollbars(cm));
                    startWidth = cm.display.barWidth;
                    startHeight = cm.display.barHeight;
                }
            }
            function updateScrollbarsInner(cm, measure) {
                var d = cm.display;
                var sizes = d.scrollbars.update(measure);
                d.sizer.style.paddingRight = (d.barWidth = sizes.right) + "px";
                d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + "px";
                d.heightForcer.style.borderBottom = sizes.bottom + "px solid transparent";
                if (sizes.right && sizes.bottom) {
                    d.scrollbarFiller.style.display = "block";
                    d.scrollbarFiller.style.height = sizes.bottom + "px";
                    d.scrollbarFiller.style.width = sizes.right + "px";
                } else {
                    d.scrollbarFiller.style.display = "";
                }
                if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
                    d.gutterFiller.style.display = "block";
                    d.gutterFiller.style.height = sizes.bottom + "px";
                    d.gutterFiller.style.width = measure.gutterWidth + "px";
                } else {
                    d.gutterFiller.style.display = "";
                }
            }
            var scrollbarModel = {
                "native": NativeScrollbars,
                "null": NullScrollbars
            };
            function initScrollbars(cm) {
                if (cm.display.scrollbars) {
                    cm.display.scrollbars.clear();
                    if (cm.display.scrollbars.addClass) {
                        rmClass(cm.display.wrapper, cm.display.scrollbars.addClass);
                    }
                }
                cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {
                    cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);
                    on(node, "mousedown", function () {
                        if (cm.state.focused) {
                            setTimeout(function () {
                                return cm.display.input.focus();
                            }, 0);
                        }
                    });
                    node.setAttribute("cm-not-content", "true");
                }, function (pos, axis) {
                    if (axis == "horizontal") {
                        setScrollLeft(cm, pos);
                    } else {
                        updateScrollTop(cm, pos);
                    }
                }, cm);
                if (cm.display.scrollbars.addClass) {
                    addClass(cm.display.wrapper, cm.display.scrollbars.addClass);
                }
            }
            var nextOpId = 0;
            function startOperation(cm) {
                cm.curOp = {
                    cm: cm,
                    viewChanged: false,
                    startHeight: cm.doc.height,
                    forceUpdate: false,
                    updateInput: 0,
                    typing: false,
                    changeObjs: null,
                    cursorActivityHandlers: null,
                    cursorActivityCalled: 0,
                    selectionChanged: false,
                    updateMaxLine: false,
                    scrollLeft: null,
                    scrollTop: null,
                    scrollToPos: null,
                    focus: false,
                    id: ++nextOpId,
                    markArrays: null
                };
                pushOperation(cm.curOp);
            }
            function endOperation(cm) {
                var op = cm.curOp;
                if (op) {
                    finishOperation(op, function (group) {
                        for (var i = 0; i < group.ops.length; i++) {
                            group.ops[i].cm.curOp = null;
                        }
                        endOperations(group);
                    });
                }
            }
            function endOperations(group) {
                var ops = group.ops;
                for (var i = 0; i < ops.length; i++) {
                    endOperation_R1(ops[i]);
                }
                for (var i$1 = 0; i$1 < ops.length; i$1++) {
                    endOperation_W1(ops[i$1]);
                }
                for (var i$2 = 0; i$2 < ops.length; i$2++) {
                    endOperation_R2(ops[i$2]);
                }
                for (var i$3 = 0; i$3 < ops.length; i$3++) {
                    endOperation_W2(ops[i$3]);
                }
                for (var i$4 = 0; i$4 < ops.length; i$4++) {
                    endOperation_finish(ops[i$4]);
                }
            }
            function endOperation_R1(op) {
                var cm = op.cm, display = cm.display;
                maybeClipScrollbars(cm);
                if (op.updateMaxLine) {
                    findMaxLine(cm);
                }
                op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null || op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom || op.scrollToPos.to.line >= display.viewTo) || display.maxLineChanged && cm.options.lineWrapping;
                op.update = op.mustUpdate && new DisplayUpdate(cm, op.mustUpdate && ({
                    top: op.scrollTop,
                    ensure: op.scrollToPos
                }), op.forceUpdate);
            }
            function endOperation_W1(op) {
                op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);
            }
            function endOperation_R2(op) {
                var cm = op.cm, display = cm.display;
                if (op.updatedDisplay) {
                    updateHeightsInViewport(cm);
                }
                op.barMeasure = measureForScrollbars(cm);
                if (display.maxLineChanged && !cm.options.lineWrapping) {
                    op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;
                    cm.display.sizerWidth = op.adjustWidthTo;
                    op.barMeasure.scrollWidth = Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);
                    op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));
                }
                if (op.updatedDisplay || op.selectionChanged) {
                    op.preparedSelection = display.input.prepareSelection();
                }
            }
            function endOperation_W2(op) {
                var cm = op.cm;
                if (op.adjustWidthTo != null) {
                    cm.display.sizer.style.minWidth = op.adjustWidthTo + "px";
                    if (op.maxScrollLeft < cm.doc.scrollLeft) {
                        setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);
                    }
                    cm.display.maxLineChanged = false;
                }
                var takeFocus = op.focus && op.focus == activeElt(root(cm));
                if (op.preparedSelection) {
                    cm.display.input.showSelection(op.preparedSelection, takeFocus);
                }
                if (op.updatedDisplay || op.startHeight != cm.doc.height) {
                    updateScrollbars(cm, op.barMeasure);
                }
                if (op.updatedDisplay) {
                    setDocumentHeight(cm, op.barMeasure);
                }
                if (op.selectionChanged) {
                    restartBlink(cm);
                }
                if (cm.state.focused && op.updateInput) {
                    cm.display.input.reset(op.typing);
                }
                if (takeFocus) {
                    ensureFocus(op.cm);
                }
            }
            function endOperation_finish(op) {
                var cm = op.cm, display = cm.display, doc = cm.doc;
                if (op.updatedDisplay) {
                    postUpdateDisplay(cm, op.update);
                }
                if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) {
                    display.wheelStartX = display.wheelStartY = null;
                }
                if (op.scrollTop != null) {
                    setScrollTop(cm, op.scrollTop, op.forceScroll);
                }
                if (op.scrollLeft != null) {
                    setScrollLeft(cm, op.scrollLeft, true, true);
                }
                if (op.scrollToPos) {
                    var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);
                    maybeScrollWindow(cm, rect);
                }
                var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;
                if (hidden) {
                    for (var i = 0; i < hidden.length; ++i) {
                        if (!hidden[i].lines.length) {
                            signal(hidden[i], "hide");
                        }
                    }
                }
                if (unhidden) {
                    for (var i$1 = 0; i$1 < unhidden.length; ++i$1) {
                        if (unhidden[i$1].lines.length) {
                            signal(unhidden[i$1], "unhide");
                        }
                    }
                }
                if (display.wrapper.offsetHeight) {
                    doc.scrollTop = cm.display.scroller.scrollTop;
                }
                if (op.changeObjs) {
                    signal(cm, "changes", cm, op.changeObjs);
                }
                if (op.update) {
                    op.update.finish();
                }
            }
            function runInOp(cm, f) {
                if (cm.curOp) {
                    return f();
                }
                startOperation(cm);
                try {
                    return f();
                } finally {
                    endOperation(cm);
                }
            }
            function operation(cm, f) {
                return function () {
                    if (cm.curOp) {
                        return f.apply(cm, arguments);
                    }
                    startOperation(cm);
                    try {
                        return f.apply(cm, arguments);
                    } finally {
                        endOperation(cm);
                    }
                };
            }
            function methodOp(f) {
                return function () {
                    if (this.curOp) {
                        return f.apply(this, arguments);
                    }
                    startOperation(this);
                    try {
                        return f.apply(this, arguments);
                    } finally {
                        endOperation(this);
                    }
                };
            }
            function docMethodOp(f) {
                return function () {
                    var cm = this.cm;
                    if (!cm || cm.curOp) {
                        return f.apply(this, arguments);
                    }
                    startOperation(cm);
                    try {
                        return f.apply(this, arguments);
                    } finally {
                        endOperation(cm);
                    }
                };
            }
            function startWorker(cm, time) {
                if (cm.doc.highlightFrontier < cm.display.viewTo) {
                    cm.state.highlight.set(time, bind(highlightWorker, cm));
                }
            }
            function highlightWorker(cm) {
                var doc = cm.doc;
                if (doc.highlightFrontier >= cm.display.viewTo) {
                    return;
                }
                var end = +new Date() + cm.options.workTime;
                var context = getContextBefore(cm, doc.highlightFrontier);
                var changedLines = [];
                doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {
                    if (context.line >= cm.display.viewFrom) {
                        var oldStyles = line.styles;
                        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;
                        var highlighted = highlightLine(cm, line, context, true);
                        if (resetState) {
                            context.state = resetState;
                        }
                        line.styles = highlighted.styles;
                        var oldCls = line.styleClasses, newCls = highlighted.classes;
                        if (newCls) {
                            line.styleClasses = newCls;
                        } else if (oldCls) {
                            line.styleClasses = null;
                        }
                        var ischange = !oldStyles || oldStyles.length != line.styles.length || oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
                        for (var i = 0; !ischange && i < oldStyles.length; ++i) {
                            ischange = oldStyles[i] != line.styles[i];
                        }
                        if (ischange) {
                            changedLines.push(context.line);
                        }
                        line.stateAfter = context.save();
                        context.nextLine();
                    } else {
                        if (line.text.length <= cm.options.maxHighlightLength) {
                            processLine(cm, line.text, context);
                        }
                        line.stateAfter = context.line % 5 == 0 ? context.save() : null;
                        context.nextLine();
                    }
                    if (+new Date() > end) {
                        startWorker(cm, cm.options.workDelay);
                        return true;
                    }
                });
                doc.highlightFrontier = context.line;
                doc.modeFrontier = Math.max(doc.modeFrontier, context.line);
                if (changedLines.length) {
                    runInOp(cm, function () {
                        for (var i = 0; i < changedLines.length; i++) {
                            regLineChange(cm, changedLines[i], "text");
                        }
                    });
                }
            }
            var DisplayUpdate = function (cm, viewport, force) {
                var display = cm.display;
                this.viewport = viewport;
                this.visible = visibleLines(display, cm.doc, viewport);
                this.editorIsHidden = !display.wrapper.offsetWidth;
                this.wrapperHeight = display.wrapper.clientHeight;
                this.wrapperWidth = display.wrapper.clientWidth;
                this.oldDisplayWidth = displayWidth(cm);
                this.force = force;
                this.dims = getDimensions(cm);
                this.events = [];
            };
            DisplayUpdate.prototype.signal = function (emitter, type) {
                if (hasHandler(emitter, type)) {
                    this.events.push(arguments);
                }
            };
            DisplayUpdate.prototype.finish = function () {
                for (var i = 0; i < this.events.length; i++) {
                    signal.apply(null, this.events[i]);
                }
            };
            function maybeClipScrollbars(cm) {
                var display = cm.display;
                if (!display.scrollbarsClipped && display.scroller.offsetWidth) {
                    display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;
                    display.heightForcer.style.height = scrollGap(cm) + "px";
                    display.sizer.style.marginBottom = -display.nativeBarWidth + "px";
                    display.sizer.style.borderRightWidth = scrollGap(cm) + "px";
                    display.scrollbarsClipped = true;
                }
            }
            function selectionSnapshot(cm) {
                if (cm.hasFocus()) {
                    return null;
                }
                var active = activeElt(root(cm));
                if (!active || !contains(cm.display.lineDiv, active)) {
                    return null;
                }
                var result = {
                    activeElt: active
                };
                if (window.getSelection) {
                    var sel = win(cm).getSelection();
                    if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {
                        result.anchorNode = sel.anchorNode;
                        result.anchorOffset = sel.anchorOffset;
                        result.focusNode = sel.focusNode;
                        result.focusOffset = sel.focusOffset;
                    }
                }
                return result;
            }
            function restoreSelection(snapshot) {
                if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt(rootNode(snapshot.activeElt))) {
                    return;
                }
                snapshot.activeElt.focus();
                if (!(/^(INPUT|TEXTAREA)$/).test(snapshot.activeElt.nodeName) && snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {
                    var doc = snapshot.activeElt.ownerDocument;
                    var sel = doc.defaultView.getSelection(), range = doc.createRange();
                    range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);
                    range.collapse(false);
                    sel.removeAllRanges();
                    sel.addRange(range);
                    sel.extend(snapshot.focusNode, snapshot.focusOffset);
                }
            }
            function updateDisplayIfNeeded(cm, update) {
                var display = cm.display, doc = cm.doc;
                if (update.editorIsHidden) {
                    resetView(cm);
                    return false;
                }
                if (!update.force && update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) && display.renderedView == display.view && countDirtyView(cm) == 0) {
                    return false;
                }
                if (maybeUpdateLineNumberWidth(cm)) {
                    resetView(cm);
                    update.dims = getDimensions(cm);
                }
                var end = doc.first + doc.size;
                var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);
                var to = Math.min(end, update.visible.to + cm.options.viewportMargin);
                if (display.viewFrom < from && from - display.viewFrom < 20) {
                    from = Math.max(doc.first, display.viewFrom);
                }
                if (display.viewTo > to && display.viewTo - to < 20) {
                    to = Math.min(end, display.viewTo);
                }
                if (sawCollapsedSpans) {
                    from = visualLineNo(cm.doc, from);
                    to = visualLineEndNo(cm.doc, to);
                }
                var different = from != display.viewFrom || to != display.viewTo || display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;
                adjustView(cm, from, to);
                display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));
                cm.display.mover.style.top = display.viewOffset + "px";
                var toUpdate = countDirtyView(cm);
                if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view && (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo)) {
                    return false;
                }
                var selSnapshot = selectionSnapshot(cm);
                if (toUpdate > 4) {
                    display.lineDiv.style.display = "none";
                }
                patchDisplay(cm, display.updateLineNumbers, update.dims);
                if (toUpdate > 4) {
                    display.lineDiv.style.display = "";
                }
                display.renderedView = display.view;
                restoreSelection(selSnapshot);
                removeChildren(display.cursorDiv);
                removeChildren(display.selectionDiv);
                display.gutters.style.height = display.sizer.style.minHeight = 0;
                if (different) {
                    display.lastWrapHeight = update.wrapperHeight;
                    display.lastWrapWidth = update.wrapperWidth;
                    startWorker(cm, 400);
                }
                display.updateLineNumbers = null;
                return true;
            }
            function postUpdateDisplay(cm, update) {
                var viewport = update.viewport;
                for (var first = true; ; first = false) {
                    if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {
                        if (viewport && viewport.top != null) {
                            viewport = {
                                top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)
                            };
                        }
                        update.visible = visibleLines(cm.display, cm.doc, viewport);
                        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo) {
                            break;
                        }
                    } else if (first) {
                        update.visible = visibleLines(cm.display, cm.doc, viewport);
                    }
                    if (!updateDisplayIfNeeded(cm, update)) {
                        break;
                    }
                    updateHeightsInViewport(cm);
                    var barMeasure = measureForScrollbars(cm);
                    updateSelection(cm);
                    updateScrollbars(cm, barMeasure);
                    setDocumentHeight(cm, barMeasure);
                    update.force = false;
                }
                update.signal(cm, "update", cm);
                if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {
                    update.signal(cm, "viewportChange", cm, cm.display.viewFrom, cm.display.viewTo);
                    cm.display.reportedViewFrom = cm.display.viewFrom;
                    cm.display.reportedViewTo = cm.display.viewTo;
                }
            }
            function updateDisplaySimple(cm, viewport) {
                var update = new DisplayUpdate(cm, viewport);
                if (updateDisplayIfNeeded(cm, update)) {
                    updateHeightsInViewport(cm);
                    postUpdateDisplay(cm, update);
                    var barMeasure = measureForScrollbars(cm);
                    updateSelection(cm);
                    updateScrollbars(cm, barMeasure);
                    setDocumentHeight(cm, barMeasure);
                    update.finish();
                }
            }
            function patchDisplay(cm, updateNumbersFrom, dims) {
                var display = cm.display, lineNumbers = cm.options.lineNumbers;
                var container = display.lineDiv, cur = container.firstChild;
                function rm(node) {
                    var next = node.nextSibling;
                    if (webkit && mac && cm.display.currentWheelTarget == node) {
                        node.style.display = "none";
                    } else {
                        node.parentNode.removeChild(node);
                    }
                    return next;
                }
                var view = display.view, lineN = display.viewFrom;
                for (var i = 0; i < view.length; i++) {
                    var lineView = view[i];
                    if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) {
                        var node = buildLineElement(cm, lineView, lineN, dims);
                        container.insertBefore(node, cur);
                    } else {
                        while (cur != lineView.node) {
                            cur = rm(cur);
                        }
                        var updateNumber = lineNumbers && updateNumbersFrom != null && updateNumbersFrom <= lineN && lineView.lineNumber;
                        if (lineView.changes) {
                            if (indexOf(lineView.changes, "gutter") > -1) {
                                updateNumber = false;
                            }
                            updateLineForChanges(cm, lineView, lineN, dims);
                        }
                        if (updateNumber) {
                            removeChildren(lineView.lineNumber);
                            lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));
                        }
                        cur = lineView.node.nextSibling;
                    }
                    lineN += lineView.size;
                }
                while (cur) {
                    cur = rm(cur);
                }
            }
            function updateGutterSpace(display) {
                var width = display.gutters.offsetWidth;
                display.sizer.style.marginLeft = width + "px";
                signalLater(display, "gutterChanged", display);
            }
            function setDocumentHeight(cm, measure) {
                cm.display.sizer.style.minHeight = measure.docHeight + "px";
                cm.display.heightForcer.style.top = measure.docHeight + "px";
                cm.display.gutters.style.height = measure.docHeight + cm.display.barHeight + scrollGap(cm) + "px";
            }
            function alignHorizontally(cm) {
                var display = cm.display, view = display.view;
                if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) {
                    return;
                }
                var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;
                var gutterW = display.gutters.offsetWidth, left = comp + "px";
                for (var i = 0; i < view.length; i++) {
                    if (!view[i].hidden) {
                        if (cm.options.fixedGutter) {
                            if (view[i].gutter) {
                                view[i].gutter.style.left = left;
                            }
                            if (view[i].gutterBackground) {
                                view[i].gutterBackground.style.left = left;
                            }
                        }
                        var align = view[i].alignable;
                        if (align) {
                            for (var j = 0; j < align.length; j++) {
                                align[j].style.left = left;
                            }
                        }
                    }
                }
                if (cm.options.fixedGutter) {
                    display.gutters.style.left = comp + gutterW + "px";
                }
            }
            function maybeUpdateLineNumberWidth(cm) {
                if (!cm.options.lineNumbers) {
                    return false;
                }
                var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;
                if (last.length != display.lineNumChars) {
                    var test = display.measure.appendChild(elt("div", [elt("div", last)], "CodeMirror-linenumber CodeMirror-gutter-elt"));
                    var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;
                    display.lineGutter.style.width = "";
                    display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;
                    display.lineNumWidth = display.lineNumInnerWidth + padding;
                    display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;
                    display.lineGutter.style.width = display.lineNumWidth + "px";
                    updateGutterSpace(cm.display);
                    return true;
                }
                return false;
            }
            function getGutters(gutters, lineNumbers) {
                var result = [], sawLineNumbers = false;
                for (var i = 0; i < gutters.length; i++) {
                    var name = gutters[i], style = null;
                    if (typeof name != "string") {
                        style = name.style;
                        name = name.className;
                    }
                    if (name == "CodeMirror-linenumbers") {
                        if (!lineNumbers) {
                            continue;
                        } else {
                            sawLineNumbers = true;
                        }
                    }
                    result.push({
                        className: name,
                        style: style
                    });
                }
                if (lineNumbers && !sawLineNumbers) {
                    result.push({
                        className: "CodeMirror-linenumbers",
                        style: null
                    });
                }
                return result;
            }
            function renderGutters(display) {
                var gutters = display.gutters, specs = display.gutterSpecs;
                removeChildren(gutters);
                display.lineGutter = null;
                for (var i = 0; i < specs.length; ++i) {
                    var ref = specs[i];
                    var className = ref.className;
                    var style = ref.style;
                    var gElt = gutters.appendChild(elt("div", null, "CodeMirror-gutter " + className));
                    if (style) {
                        gElt.style.cssText = style;
                    }
                    if (className == "CodeMirror-linenumbers") {
                        display.lineGutter = gElt;
                        gElt.style.width = (display.lineNumWidth || 1) + "px";
                    }
                }
                gutters.style.display = specs.length ? "" : "none";
                updateGutterSpace(display);
            }
            function updateGutters(cm) {
                renderGutters(cm.display);
                regChange(cm);
                alignHorizontally(cm);
            }
            function Display(place, doc, input, options) {
                var d = this;
                this.input = input;
                d.scrollbarFiller = elt("div", null, "CodeMirror-scrollbar-filler");
                d.scrollbarFiller.setAttribute("cm-not-content", "true");
                d.gutterFiller = elt("div", null, "CodeMirror-gutter-filler");
                d.gutterFiller.setAttribute("cm-not-content", "true");
                d.lineDiv = eltP("div", null, "CodeMirror-code");
                d.selectionDiv = elt("div", null, null, "position: relative; z-index: 1");
                d.cursorDiv = elt("div", null, "CodeMirror-cursors");
                d.measure = elt("div", null, "CodeMirror-measure");
                d.lineMeasure = elt("div", null, "CodeMirror-measure");
                d.lineSpace = eltP("div", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv], null, "position: relative; outline: none");
                var lines = eltP("div", [d.lineSpace], "CodeMirror-lines");
                d.mover = elt("div", [lines], null, "position: relative");
                d.sizer = elt("div", [d.mover], "CodeMirror-sizer");
                d.sizerWidth = null;
                d.heightForcer = elt("div", null, null, "position: absolute; height: " + scrollerGap + "px; width: 1px;");
                d.gutters = elt("div", null, "CodeMirror-gutters");
                d.lineGutter = null;
                d.scroller = elt("div", [d.sizer, d.heightForcer, d.gutters], "CodeMirror-scroll");
                d.scroller.setAttribute("tabIndex", "-1");
                d.wrapper = elt("div", [d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
                if (chrome && chrome_version >= 105) {
                    d.wrapper.style.clipPath = "inset(0px)";
                }
                d.wrapper.setAttribute('translate', 'no');
                if (ie && ie_version < 8) {
                    d.gutters.style.zIndex = -1;
                    d.scroller.style.paddingRight = 0;
                }
                if (!webkit && !(gecko && mobile)) {
                    d.scroller.draggable = true;
                }
                if (place) {
                    if (place.appendChild) {
                        place.appendChild(d.wrapper);
                    } else {
                        place(d.wrapper);
                    }
                }
                d.viewFrom = d.viewTo = doc.first;
                d.reportedViewFrom = d.reportedViewTo = doc.first;
                d.view = [];
                d.renderedView = null;
                d.externalMeasured = null;
                d.viewOffset = 0;
                d.lastWrapHeight = d.lastWrapWidth = 0;
                d.updateLineNumbers = null;
                d.nativeBarWidth = d.barHeight = d.barWidth = 0;
                d.scrollbarsClipped = false;
                d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;
                d.alignWidgets = false;
                d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
                d.maxLine = null;
                d.maxLineLength = 0;
                d.maxLineChanged = false;
                d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;
                d.shift = false;
                d.selForContextMenu = null;
                d.activeTouch = null;
                d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);
                renderGutters(d);
                input.init(d);
            }
            var wheelSamples = 0, wheelPixelsPerUnit = null;
            if (ie) {
                wheelPixelsPerUnit = -.53;
            } else if (gecko) {
                wheelPixelsPerUnit = 15;
            } else if (chrome) {
                wheelPixelsPerUnit = -.7;
            } else if (safari) {
                wheelPixelsPerUnit = -1 / 3;
            }
            function wheelEventDelta(e) {
                var dx = e.wheelDeltaX, dy = e.wheelDeltaY;
                if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) {
                    dx = e.detail;
                }
                if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) {
                    dy = e.detail;
                } else if (dy == null) {
                    dy = e.wheelDelta;
                }
                return {
                    x: dx,
                    y: dy
                };
            }
            function wheelEventPixels(e) {
                var delta = wheelEventDelta(e);
                delta.x *= wheelPixelsPerUnit;
                delta.y *= wheelPixelsPerUnit;
                return delta;
            }
            function onScrollWheel(cm, e) {
                if (chrome && chrome_version == 102) {
                    if (cm.display.chromeScrollHack == null) {
                        cm.display.sizer.style.pointerEvents = "none";
                    } else {
                        clearTimeout(cm.display.chromeScrollHack);
                    }
                    cm.display.chromeScrollHack = setTimeout(function () {
                        cm.display.chromeScrollHack = null;
                        cm.display.sizer.style.pointerEvents = "";
                    }, 100);
                }
                var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;
                var pixelsPerUnit = wheelPixelsPerUnit;
                if (e.deltaMode === 0) {
                    dx = e.deltaX;
                    dy = e.deltaY;
                    pixelsPerUnit = 1;
                }
                var display = cm.display, scroll = display.scroller;
                var canScrollX = scroll.scrollWidth > scroll.clientWidth;
                var canScrollY = scroll.scrollHeight > scroll.clientHeight;
                if (!(dx && canScrollX || dy && canScrollY)) {
                    return;
                }
                if (dy && mac && webkit) {
                    outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {
                        for (var i = 0; i < view.length; i++) {
                            if (view[i].node == cur) {
                                cm.display.currentWheelTarget = cur;
                                break outer;
                            }
                        }
                    }
                }
                if (dx && !gecko && !presto && pixelsPerUnit != null) {
                    if (dy && canScrollY) {
                        updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit));
                    }
                    setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));
                    if (!dy || dy && canScrollY) {
                        e_preventDefault(e);
                    }
                    display.wheelStartX = null;
                    return;
                }
                if (dy && pixelsPerUnit != null) {
                    var pixels = dy * pixelsPerUnit;
                    var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;
                    if (pixels < 0) {
                        top = Math.max(0, top + pixels - 50);
                    } else {
                        bot = Math.min(cm.doc.height, bot + pixels + 50);
                    }
                    updateDisplaySimple(cm, {
                        top: top,
                        bottom: bot
                    });
                }
                if (wheelSamples < 20 && e.deltaMode !== 0) {
                    if (display.wheelStartX == null) {
                        display.wheelStartX = scroll.scrollLeft;
                        display.wheelStartY = scroll.scrollTop;
                        display.wheelDX = dx;
                        display.wheelDY = dy;
                        setTimeout(function () {
                            if (display.wheelStartX == null) {
                                return;
                            }
                            var movedX = scroll.scrollLeft - display.wheelStartX;
                            var movedY = scroll.scrollTop - display.wheelStartY;
                            var sample = movedY && display.wheelDY && movedY / display.wheelDY || movedX && display.wheelDX && movedX / display.wheelDX;
                            display.wheelStartX = display.wheelStartY = null;
                            if (!sample) {
                                return;
                            }
                            wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);
                            ++wheelSamples;
                        }, 200);
                    } else {
                        display.wheelDX += dx;
                        display.wheelDY += dy;
                    }
                }
            }
            var Selection = function (ranges, primIndex) {
                this.ranges = ranges;
                this.primIndex = primIndex;
            };
            Selection.prototype.primary = function () {
                return this.ranges[this.primIndex];
            };
            Selection.prototype.equals = function (other) {
                if (other == this) {
                    return true;
                }
                if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) {
                    return false;
                }
                for (var i = 0; i < this.ranges.length; i++) {
                    var here = this.ranges[i], there = other.ranges[i];
                    if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) {
                        return false;
                    }
                }
                return true;
            };
            Selection.prototype.deepCopy = function () {
                var out = [];
                for (var i = 0; i < this.ranges.length; i++) {
                    out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));
                }
                return new Selection(out, this.primIndex);
            };
            Selection.prototype.somethingSelected = function () {
                for (var i = 0; i < this.ranges.length; i++) {
                    if (!this.ranges[i].empty()) {
                        return true;
                    }
                }
                return false;
            };
            Selection.prototype.contains = function (pos, end) {
                if (!end) {
                    end = pos;
                }
                for (var i = 0; i < this.ranges.length; i++) {
                    var range = this.ranges[i];
                    if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0) {
                        return i;
                    }
                }
                return -1;
            };
            var Range = function (anchor, head) {
                this.anchor = anchor;
                this.head = head;
            };
            Range.prototype.from = function () {
                return minPos(this.anchor, this.head);
            };
            Range.prototype.to = function () {
                return maxPos(this.anchor, this.head);
            };
            Range.prototype.empty = function () {
                return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;
            };
            function normalizeSelection(cm, ranges, primIndex) {
                var mayTouch = cm && cm.options.selectionsMayTouch;
                var prim = ranges[primIndex];
                ranges.sort(function (a, b) {
                    return cmp(a.from(), b.from());
                });
                primIndex = indexOf(ranges, prim);
                for (var i = 1; i < ranges.length; i++) {
                    var cur = ranges[i], prev = ranges[i - 1];
                    var diff = cmp(prev.to(), cur.from());
                    if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {
                        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());
                        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;
                        if (i <= primIndex) {
                            --primIndex;
                        }
                        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));
                    }
                }
                return new Selection(ranges, primIndex);
            }
            function simpleSelection(anchor, head) {
                return new Selection([new Range(anchor, head || anchor)], 0);
            }
            function changeEnd(change) {
                if (!change.text) {
                    return change.to;
                }
                return Pos(change.from.line + change.text.length - 1, lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0));
            }
            function adjustForChange(pos, change) {
                if (cmp(pos, change.from) < 0) {
                    return pos;
                }
                if (cmp(pos, change.to) <= 0) {
                    return changeEnd(change);
                }
                var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;
                if (pos.line == change.to.line) {
                    ch += changeEnd(change).ch - change.to.ch;
                }
                return Pos(line, ch);
            }
            function computeSelAfterChange(doc, change) {
                var out = [];
                for (var i = 0; i < doc.sel.ranges.length; i++) {
                    var range = doc.sel.ranges[i];
                    out.push(new Range(adjustForChange(range.anchor, change), adjustForChange(range.head, change)));
                }
                return normalizeSelection(doc.cm, out, doc.sel.primIndex);
            }
            function offsetPos(pos, old, nw) {
                if (pos.line == old.line) {
                    return Pos(nw.line, pos.ch - old.ch + nw.ch);
                } else {
                    return Pos(nw.line + (pos.line - old.line), pos.ch);
                }
            }
            function computeReplacedSel(doc, changes, hint) {
                var out = [];
                var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;
                for (var i = 0; i < changes.length; i++) {
                    var change = changes[i];
                    var from = offsetPos(change.from, oldPrev, newPrev);
                    var to = offsetPos(changeEnd(change), oldPrev, newPrev);
                    oldPrev = change.to;
                    newPrev = to;
                    if (hint == "around") {
                        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;
                        out[i] = new Range(inv ? to : from, inv ? from : to);
                    } else {
                        out[i] = new Range(from, from);
                    }
                }
                return new Selection(out, doc.sel.primIndex);
            }
            function loadMode(cm) {
                cm.doc.mode = getMode(cm.options, cm.doc.modeOption);
                resetModeState(cm);
            }
            function resetModeState(cm) {
                cm.doc.iter(function (line) {
                    if (line.stateAfter) {
                        line.stateAfter = null;
                    }
                    if (line.styles) {
                        line.styles = null;
                    }
                });
                cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;
                startWorker(cm, 100);
                cm.state.modeGen++;
                if (cm.curOp) {
                    regChange(cm);
                }
            }
            function isWholeLineUpdate(doc, change) {
                return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == "" && (!doc.cm || doc.cm.options.wholeLineUpdateBefore);
            }
            function updateDoc(doc, change, markedSpans, estimateHeight) {
                function spansFor(n) {
                    return markedSpans ? markedSpans[n] : null;
                }
                function update(line, text, spans) {
                    updateLine(line, text, spans, estimateHeight);
                    signalLater(line, "change", line, change);
                }
                function linesFor(start, end) {
                    var result = [];
                    for (var i = start; i < end; ++i) {
                        result.push(new Line(text[i], spansFor(i), estimateHeight));
                    }
                    return result;
                }
                var from = change.from, to = change.to, text = change.text;
                var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);
                var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;
                if (change.full) {
                    doc.insert(0, linesFor(0, text.length));
                    doc.remove(text.length, doc.size - text.length);
                } else if (isWholeLineUpdate(doc, change)) {
                    var added = linesFor(0, text.length - 1);
                    update(lastLine, lastLine.text, lastSpans);
                    if (nlines) {
                        doc.remove(from.line, nlines);
                    }
                    if (added.length) {
                        doc.insert(from.line, added);
                    }
                } else if (firstLine == lastLine) {
                    if (text.length == 1) {
                        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);
                    } else {
                        var added$1 = linesFor(1, text.length - 1);
                        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));
                        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
                        doc.insert(from.line + 1, added$1);
                    }
                } else if (text.length == 1) {
                    update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));
                    doc.remove(from.line + 1, nlines);
                } else {
                    update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));
                    update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);
                    var added$2 = linesFor(1, text.length - 1);
                    if (nlines > 1) {
                        doc.remove(from.line + 1, nlines - 1);
                    }
                    doc.insert(from.line + 1, added$2);
                }
                signalLater(doc, "change", doc, change);
            }
            function linkedDocs(doc, f, sharedHistOnly) {
                function propagate(doc, skip, sharedHist) {
                    if (doc.linked) {
                        for (var i = 0; i < doc.linked.length; ++i) {
                            var rel = doc.linked[i];
                            if (rel.doc == skip) {
                                continue;
                            }
                            var shared = sharedHist && rel.sharedHist;
                            if (sharedHistOnly && !shared) {
                                continue;
                            }
                            f(rel.doc, shared);
                            propagate(rel.doc, doc, shared);
                        }
                    }
                }
                propagate(doc, null, true);
            }
            function attachDoc(cm, doc) {
                if (doc.cm) {
                    throw new Error("This document is already in use.");
                }
                cm.doc = doc;
                doc.cm = cm;
                estimateLineHeights(cm);
                loadMode(cm);
                setDirectionClass(cm);
                cm.options.direction = doc.direction;
                if (!cm.options.lineWrapping) {
                    findMaxLine(cm);
                }
                cm.options.mode = doc.modeOption;
                regChange(cm);
            }
            function setDirectionClass(cm) {
                (cm.doc.direction == "rtl" ? addClass : rmClass)(cm.display.lineDiv, "CodeMirror-rtl");
            }
            function directionChanged(cm) {
                runInOp(cm, function () {
                    setDirectionClass(cm);
                    regChange(cm);
                });
            }
            function History(prev) {
                this.done = [];
                this.undone = [];
                this.undoDepth = prev ? prev.undoDepth : Infinity;
                this.lastModTime = this.lastSelTime = 0;
                this.lastOp = this.lastSelOp = null;
                this.lastOrigin = this.lastSelOrigin = null;
                this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;
            }
            function historyChangeFromChange(doc, change) {
                var histChange = {
                    from: copyPos(change.from),
                    to: changeEnd(change),
                    text: getBetween(doc, change.from, change.to)
                };
                attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
                linkedDocs(doc, function (doc) {
                    return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);
                }, true);
                return histChange;
            }
            function clearSelectionEvents(array) {
                while (array.length) {
                    var last = lst(array);
                    if (last.ranges) {
                        array.pop();
                    } else {
                        break;
                    }
                }
            }
            function lastChangeEvent(hist, force) {
                if (force) {
                    clearSelectionEvents(hist.done);
                    return lst(hist.done);
                } else if (hist.done.length && !lst(hist.done).ranges) {
                    return lst(hist.done);
                } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {
                    hist.done.pop();
                    return lst(hist.done);
                }
            }
            function addChangeToHistory(doc, change, selAfter, opId) {
                var hist = doc.history;
                hist.undone.length = 0;
                var time = +new Date(), cur;
                var last;
                if ((hist.lastOp == opId || hist.lastOrigin == change.origin && change.origin && (change.origin.charAt(0) == "+" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500) || change.origin.charAt(0) == "*")) && (cur = lastChangeEvent(hist, hist.lastOp == opId))) {
                    last = lst(cur.changes);
                    if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {
                        last.to = changeEnd(change);
                    } else {
                        cur.changes.push(historyChangeFromChange(doc, change));
                    }
                } else {
                    var before = lst(hist.done);
                    if (!before || !before.ranges) {
                        pushSelectionToHistory(doc.sel, hist.done);
                    }
                    cur = {
                        changes: [historyChangeFromChange(doc, change)],
                        generation: hist.generation
                    };
                    hist.done.push(cur);
                    while (hist.done.length > hist.undoDepth) {
                        hist.done.shift();
                        if (!hist.done[0].ranges) {
                            hist.done.shift();
                        }
                    }
                }
                hist.done.push(selAfter);
                hist.generation = ++hist.maxGeneration;
                hist.lastModTime = hist.lastSelTime = time;
                hist.lastOp = hist.lastSelOp = opId;
                hist.lastOrigin = hist.lastSelOrigin = change.origin;
                if (!last) {
                    signal(doc, "historyAdded");
                }
            }
            function selectionEventCanBeMerged(doc, origin, prev, sel) {
                var ch = origin.charAt(0);
                return ch == "*" || ch == "+" && prev.ranges.length == sel.ranges.length && prev.somethingSelected() == sel.somethingSelected() && new Date() - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);
            }
            function addSelectionToHistory(doc, sel, opId, options) {
                var hist = doc.history, origin = options && options.origin;
                if (opId == hist.lastSelOp || origin && hist.lastSelOrigin == origin && (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin || selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))) {
                    hist.done[hist.done.length - 1] = sel;
                } else {
                    pushSelectionToHistory(sel, hist.done);
                }
                hist.lastSelTime = +new Date();
                hist.lastSelOrigin = origin;
                hist.lastSelOp = opId;
                if (options && options.clearRedo !== false) {
                    clearSelectionEvents(hist.undone);
                }
            }
            function pushSelectionToHistory(sel, dest) {
                var top = lst(dest);
                if (!(top && top.ranges && top.equals(sel))) {
                    dest.push(sel);
                }
            }
            function attachLocalSpans(doc, change, from, to) {
                var existing = change["spans_" + doc.id], n = 0;
                doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {
                    if (line.markedSpans) {
                        (existing || (existing = change["spans_" + doc.id] = {}))[n] = line.markedSpans;
                    }
                    ++n;
                });
            }
            function removeClearedSpans(spans) {
                if (!spans) {
                    return null;
                }
                var out;
                for (var i = 0; i < spans.length; ++i) {
                    if (spans[i].marker.explicitlyCleared) {
                        if (!out) {
                            out = spans.slice(0, i);
                        }
                    } else if (out) {
                        out.push(spans[i]);
                    }
                }
                return !out ? spans : out.length ? out : null;
            }
            function getOldSpans(doc, change) {
                var found = change["spans_" + doc.id];
                if (!found) {
                    return null;
                }
                var nw = [];
                for (var i = 0; i < change.text.length; ++i) {
                    nw.push(removeClearedSpans(found[i]));
                }
                return nw;
            }
            function mergeOldSpans(doc, change) {
                var old = getOldSpans(doc, change);
                var stretched = stretchSpansOverChange(doc, change);
                if (!old) {
                    return stretched;
                }
                if (!stretched) {
                    return old;
                }
                for (var i = 0; i < old.length; ++i) {
                    var oldCur = old[i], stretchCur = stretched[i];
                    if (oldCur && stretchCur) {
                        spans: for (var j = 0; j < stretchCur.length; ++j) {
                            var span = stretchCur[j];
                            for (var k = 0; k < oldCur.length; ++k) {
                                if (oldCur[k].marker == span.marker) {
                                    continue spans;
                                }
                            }
                            oldCur.push(span);
                        }
                    } else if (stretchCur) {
                        old[i] = stretchCur;
                    }
                }
                return old;
            }
            function copyHistoryArray(events, newGroup, instantiateSel) {
                var copy = [];
                for (var i = 0; i < events.length; ++i) {
                    var event = events[i];
                    if (event.ranges) {
                        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);
                        continue;
                    }
                    var changes = event.changes, newChanges = [];
                    copy.push({
                        changes: newChanges
                    });
                    for (var j = 0; j < changes.length; ++j) {
                        var change = changes[j], m = void 0;
                        newChanges.push({
                            from: change.from,
                            to: change.to,
                            text: change.text
                        });
                        if (newGroup) {
                            for (var prop in change) {
                                if (m = prop.match(/^spans_(\d+)$/)) {
                                    if (indexOf(newGroup, Number(m[1])) > -1) {
                                        lst(newChanges)[prop] = change[prop];
                                        delete change[prop];
                                    }
                                }
                            }
                        }
                    }
                }
                return copy;
            }
            function extendRange(range, head, other, extend) {
                if (extend) {
                    var anchor = range.anchor;
                    if (other) {
                        var posBefore = cmp(head, anchor) < 0;
                        if (posBefore != cmp(other, anchor) < 0) {
                            anchor = head;
                            head = other;
                        } else if (posBefore != cmp(head, other) < 0) {
                            head = other;
                        }
                    }
                    return new Range(anchor, head);
                } else {
                    return new Range(other || head, head);
                }
            }
            function extendSelection(doc, head, other, options, extend) {
                if (extend == null) {
                    extend = doc.cm && (doc.cm.display.shift || doc.extend);
                }
                setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);
            }
            function extendSelections(doc, heads, options) {
                var out = [];
                var extend = doc.cm && (doc.cm.display.shift || doc.extend);
                for (var i = 0; i < doc.sel.ranges.length; i++) {
                    out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend);
                }
                var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);
                setSelection(doc, newSel, options);
            }
            function replaceOneSelection(doc, i, range, options) {
                var ranges = doc.sel.ranges.slice(0);
                ranges[i] = range;
                setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);
            }
            function setSimpleSelection(doc, anchor, head, options) {
                setSelection(doc, simpleSelection(anchor, head), options);
            }
            function filterSelectionChange(doc, sel, options) {
                var obj = {
                    ranges: sel.ranges,
                    update: function (ranges) {
                        this.ranges = [];
                        for (var i = 0; i < ranges.length; i++) {
                            this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor), clipPos(doc, ranges[i].head));
                        }
                    },
                    origin: options && options.origin
                };
                signal(doc, "beforeSelectionChange", doc, obj);
                if (doc.cm) {
                    signal(doc.cm, "beforeSelectionChange", doc.cm, obj);
                }
                if (obj.ranges != sel.ranges) {
                    return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1);
                } else {
                    return sel;
                }
            }
            function setSelectionReplaceHistory(doc, sel, options) {
                var done = doc.history.done, last = lst(done);
                if (last && last.ranges) {
                    done[done.length - 1] = sel;
                    setSelectionNoUndo(doc, sel, options);
                } else {
                    setSelection(doc, sel, options);
                }
            }
            function setSelection(doc, sel, options) {
                setSelectionNoUndo(doc, sel, options);
                addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);
            }
            function setSelectionNoUndo(doc, sel, options) {
                if (hasHandler(doc, "beforeSelectionChange") || doc.cm && hasHandler(doc.cm, "beforeSelectionChange")) {
                    sel = filterSelectionChange(doc, sel, options);
                }
                var bias = options && options.bias || (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);
                setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));
                if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption("readOnly") != "nocursor") {
                    ensureCursorVisible(doc.cm);
                }
            }
            function setSelectionInner(doc, sel) {
                if (sel.equals(doc.sel)) {
                    return;
                }
                doc.sel = sel;
                if (doc.cm) {
                    doc.cm.curOp.updateInput = 1;
                    doc.cm.curOp.selectionChanged = true;
                    signalCursorActivity(doc.cm);
                }
                signalLater(doc, "cursorActivity", doc);
            }
            function reCheckSelection(doc) {
                setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));
            }
            function skipAtomicInSelection(doc, sel, bias, mayClear) {
                var out;
                for (var i = 0; i < sel.ranges.length; i++) {
                    var range = sel.ranges[i];
                    var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];
                    var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);
                    var newHead = range.head == range.anchor ? newAnchor : skipAtomic(doc, range.head, old && old.head, bias, mayClear);
                    if (out || newAnchor != range.anchor || newHead != range.head) {
                        if (!out) {
                            out = sel.ranges.slice(0, i);
                        }
                        out[i] = new Range(newAnchor, newHead);
                    }
                }
                return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel;
            }
            function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {
                var line = getLine(doc, pos.line);
                if (line.markedSpans) {
                    for (var i = 0; i < line.markedSpans.length; ++i) {
                        var sp = line.markedSpans[i], m = sp.marker;
                        var preventCursorLeft = ("selectLeft" in m) ? !m.selectLeft : m.inclusiveLeft;
                        var preventCursorRight = ("selectRight" in m) ? !m.selectRight : m.inclusiveRight;
                        if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) && (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {
                            if (mayClear) {
                                signal(m, "beforeCursorEnter");
                                if (m.explicitlyCleared) {
                                    if (!line.markedSpans) {
                                        break;
                                    } else {
                                        --i;
                                        continue;
                                    }
                                }
                            }
                            if (!m.atomic) {
                                continue;
                            }
                            if (oldPos) {
                                var near = m.find(dir < 0 ? 1 : -1), diff = void 0;
                                if (dir < 0 ? preventCursorRight : preventCursorLeft) {
                                    near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null);
                                }
                                if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0)) {
                                    return skipAtomicInner(doc, near, pos, dir, mayClear);
                                }
                            }
                            var far = m.find(dir < 0 ? -1 : 1);
                            if (dir < 0 ? preventCursorLeft : preventCursorRight) {
                                far = movePos(doc, far, dir, far.line == pos.line ? line : null);
                            }
                            return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null;
                        }
                    }
                }
                return pos;
            }
            function skipAtomic(doc, pos, oldPos, bias, mayClear) {
                var dir = bias || 1;
                var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, dir, true) || skipAtomicInner(doc, pos, oldPos, -dir, mayClear) || !mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true);
                if (!found) {
                    doc.cantEdit = true;
                    return Pos(doc.first, 0);
                }
                return found;
            }
            function movePos(doc, pos, dir, line) {
                if (dir < 0 && pos.ch == 0) {
                    if (pos.line > doc.first) {
                        return clipPos(doc, Pos(pos.line - 1));
                    } else {
                        return null;
                    }
                } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {
                    if (pos.line < doc.first + doc.size - 1) {
                        return Pos(pos.line + 1, 0);
                    } else {
                        return null;
                    }
                } else {
                    return new Pos(pos.line, pos.ch + dir);
                }
            }
            function selectAll(cm) {
                cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);
            }
            function filterChange(doc, change, update) {
                var obj = {
                    canceled: false,
                    from: change.from,
                    to: change.to,
                    text: change.text,
                    origin: change.origin,
                    cancel: function () {
                        return obj.canceled = true;
                    }
                };
                if (update) {
                    obj.update = function (from, to, text, origin) {
                        if (from) {
                            obj.from = clipPos(doc, from);
                        }
                        if (to) {
                            obj.to = clipPos(doc, to);
                        }
                        if (text) {
                            obj.text = text;
                        }
                        if (origin !== undefined) {
                            obj.origin = origin;
                        }
                    };
                }
                signal(doc, "beforeChange", doc, obj);
                if (doc.cm) {
                    signal(doc.cm, "beforeChange", doc.cm, obj);
                }
                if (obj.canceled) {
                    if (doc.cm) {
                        doc.cm.curOp.updateInput = 2;
                    }
                    return null;
                }
                return {
                    from: obj.from,
                    to: obj.to,
                    text: obj.text,
                    origin: obj.origin
                };
            }
            function makeChange(doc, change, ignoreReadOnly) {
                if (doc.cm) {
                    if (!doc.cm.curOp) {
                        return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly);
                    }
                    if (doc.cm.state.suppressEdits) {
                        return;
                    }
                }
                if (hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange")) {
                    change = filterChange(doc, change, true);
                    if (!change) {
                        return;
                    }
                }
                var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);
                if (split) {
                    for (var i = split.length - 1; i >= 0; --i) {
                        makeChangeInner(doc, {
                            from: split[i].from,
                            to: split[i].to,
                            text: i ? [""] : change.text,
                            origin: change.origin
                        });
                    }
                } else {
                    makeChangeInner(doc, change);
                }
            }
            function makeChangeInner(doc, change) {
                if (change.text.length == 1 && change.text[0] == "" && cmp(change.from, change.to) == 0) {
                    return;
                }
                var selAfter = computeSelAfterChange(doc, change);
                addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);
                makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));
                var rebased = [];
                linkedDocs(doc, function (doc, sharedHist) {
                    if (!sharedHist && indexOf(rebased, doc.history) == -1) {
                        rebaseHist(doc.history, change);
                        rebased.push(doc.history);
                    }
                    makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));
                });
            }
            function makeChangeFromHistory(doc, type, allowSelectionOnly) {
                var suppress = doc.cm && doc.cm.state.suppressEdits;
                if (suppress && !allowSelectionOnly) {
                    return;
                }
                var hist = doc.history, event, selAfter = doc.sel;
                var source = type == "undo" ? hist.done : hist.undone, dest = type == "undo" ? hist.undone : hist.done;
                var i = 0;
                for (; i < source.length; i++) {
                    event = source[i];
                    if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges) {
                        break;
                    }
                }
                if (i == source.length) {
                    return;
                }
                hist.lastOrigin = hist.lastSelOrigin = null;
                for (; ; ) {
                    event = source.pop();
                    if (event.ranges) {
                        pushSelectionToHistory(event, dest);
                        if (allowSelectionOnly && !event.equals(doc.sel)) {
                            setSelection(doc, event, {
                                clearRedo: false
                            });
                            return;
                        }
                        selAfter = event;
                    } else if (suppress) {
                        source.push(event);
                        return;
                    } else {
                        break;
                    }
                }
                var antiChanges = [];
                pushSelectionToHistory(selAfter, dest);
                dest.push({
                    changes: antiChanges,
                    generation: hist.generation
                });
                hist.generation = event.generation || ++hist.maxGeneration;
                var filter = hasHandler(doc, "beforeChange") || doc.cm && hasHandler(doc.cm, "beforeChange");
                var loop = function (i) {
                    var change = event.changes[i];
                    change.origin = type;
                    if (filter && !filterChange(doc, change, false)) {
                        source.length = 0;
                        return {};
                    }
                    antiChanges.push(historyChangeFromChange(doc, change));
                    var after = i ? computeSelAfterChange(doc, change) : lst(source);
                    makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));
                    if (!i && doc.cm) {
                        doc.cm.scrollIntoView({
                            from: change.from,
                            to: changeEnd(change)
                        });
                    }
                    var rebased = [];
                    linkedDocs(doc, function (doc, sharedHist) {
                        if (!sharedHist && indexOf(rebased, doc.history) == -1) {
                            rebaseHist(doc.history, change);
                            rebased.push(doc.history);
                        }
                        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));
                    });
                };
                for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {
                    var returned = loop(i$1);
                    if (returned) return returned.v;
                }
            }
            function shiftDoc(doc, distance) {
                if (distance == 0) {
                    return;
                }
                doc.first += distance;
                doc.sel = new Selection(map(doc.sel.ranges, function (range) {
                    return new Range(Pos(range.anchor.line + distance, range.anchor.ch), Pos(range.head.line + distance, range.head.ch));
                }), doc.sel.primIndex);
                if (doc.cm) {
                    regChange(doc.cm, doc.first, doc.first - distance, distance);
                    for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++) {
                        regLineChange(doc.cm, l, "gutter");
                    }
                }
            }
            function makeChangeSingleDoc(doc, change, selAfter, spans) {
                if (doc.cm && !doc.cm.curOp) {
                    return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans);
                }
                if (change.to.line < doc.first) {
                    shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));
                    return;
                }
                if (change.from.line > doc.lastLine()) {
                    return;
                }
                if (change.from.line < doc.first) {
                    var shift = change.text.length - 1 - (doc.first - change.from.line);
                    shiftDoc(doc, shift);
                    change = {
                        from: Pos(doc.first, 0),
                        to: Pos(change.to.line + shift, change.to.ch),
                        text: [lst(change.text)],
                        origin: change.origin
                    };
                }
                var last = doc.lastLine();
                if (change.to.line > last) {
                    change = {
                        from: change.from,
                        to: Pos(last, getLine(doc, last).text.length),
                        text: [change.text[0]],
                        origin: change.origin
                    };
                }
                change.removed = getBetween(doc, change.from, change.to);
                if (!selAfter) {
                    selAfter = computeSelAfterChange(doc, change);
                }
                if (doc.cm) {
                    makeChangeSingleDocInEditor(doc.cm, change, spans);
                } else {
                    updateDoc(doc, change, spans);
                }
                setSelectionNoUndo(doc, selAfter, sel_dontScroll);
                if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0))) {
                    doc.cantEdit = false;
                }
            }
            function makeChangeSingleDocInEditor(cm, change, spans) {
                var doc = cm.doc, display = cm.display, from = change.from, to = change.to;
                var recomputeMaxLength = false, checkWidthStart = from.line;
                if (!cm.options.lineWrapping) {
                    checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));
                    doc.iter(checkWidthStart, to.line + 1, function (line) {
                        if (line == display.maxLine) {
                            recomputeMaxLength = true;
                            return true;
                        }
                    });
                }
                if (doc.sel.contains(change.from, change.to) > -1) {
                    signalCursorActivity(cm);
                }
                updateDoc(doc, change, spans, estimateHeight(cm));
                if (!cm.options.lineWrapping) {
                    doc.iter(checkWidthStart, from.line + change.text.length, function (line) {
                        var len = lineLength(line);
                        if (len > display.maxLineLength) {
                            display.maxLine = line;
                            display.maxLineLength = len;
                            display.maxLineChanged = true;
                            recomputeMaxLength = false;
                        }
                    });
                    if (recomputeMaxLength) {
                        cm.curOp.updateMaxLine = true;
                    }
                }
                retreatFrontier(doc, from.line);
                startWorker(cm, 400);
                var lendiff = change.text.length - (to.line - from.line) - 1;
                if (change.full) {
                    regChange(cm);
                } else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change)) {
                    regLineChange(cm, from.line, "text");
                } else {
                    regChange(cm, from.line, to.line + 1, lendiff);
                }
                var changesHandler = hasHandler(cm, "changes"), changeHandler = hasHandler(cm, "change");
                if (changeHandler || changesHandler) {
                    var obj = {
                        from: from,
                        to: to,
                        text: change.text,
                        removed: change.removed,
                        origin: change.origin
                    };
                    if (changeHandler) {
                        signalLater(cm, "change", cm, obj);
                    }
                    if (changesHandler) {
                        (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);
                    }
                }
                cm.display.selForContextMenu = null;
            }
            function replaceRange(doc, code, from, to, origin) {
                var assign;
                if (!to) {
                    to = from;
                }
                if (cmp(to, from) < 0) {
                    (assign = [to, from], from = assign[0], to = assign[1]);
                }
                if (typeof code == "string") {
                    code = doc.splitLines(code);
                }
                makeChange(doc, {
                    from: from,
                    to: to,
                    text: code,
                    origin: origin
                });
            }
            function rebaseHistSelSingle(pos, from, to, diff) {
                if (to < pos.line) {
                    pos.line += diff;
                } else if (from < pos.line) {
                    pos.line = from;
                    pos.ch = 0;
                }
            }
            function rebaseHistArray(array, from, to, diff) {
                for (var i = 0; i < array.length; ++i) {
                    var sub = array[i], ok = true;
                    if (sub.ranges) {
                        if (!sub.copied) {
                            sub = array[i] = sub.deepCopy();
                            sub.copied = true;
                        }
                        for (var j = 0; j < sub.ranges.length; j++) {
                            rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);
                            rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);
                        }
                        continue;
                    }
                    for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {
                        var cur = sub.changes[j$1];
                        if (to < cur.from.line) {
                            cur.from = Pos(cur.from.line + diff, cur.from.ch);
                            cur.to = Pos(cur.to.line + diff, cur.to.ch);
                        } else if (from <= cur.to.line) {
                            ok = false;
                            break;
                        }
                    }
                    if (!ok) {
                        array.splice(0, i + 1);
                        i = 0;
                    }
                }
            }
            function rebaseHist(hist, change) {
                var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;
                rebaseHistArray(hist.done, from, to, diff);
                rebaseHistArray(hist.undone, from, to, diff);
            }
            function changeLine(doc, handle, changeType, op) {
                var no = handle, line = handle;
                if (typeof handle == "number") {
                    line = getLine(doc, clipLine(doc, handle));
                } else {
                    no = lineNo(handle);
                }
                if (no == null) {
                    return null;
                }
                if (op(line, no) && doc.cm) {
                    regLineChange(doc.cm, no, changeType);
                }
                return line;
            }
            function LeafChunk(lines) {
                this.lines = lines;
                this.parent = null;
                var height = 0;
                for (var i = 0; i < lines.length; ++i) {
                    lines[i].parent = this;
                    height += lines[i].height;
                }
                this.height = height;
            }
            LeafChunk.prototype = {
                chunkSize: function () {
                    return this.lines.length;
                },
                removeInner: function (at, n) {
                    for (var i = at, e = at + n; i < e; ++i) {
                        var line = this.lines[i];
                        this.height -= line.height;
                        cleanUpLine(line);
                        signalLater(line, "delete");
                    }
                    this.lines.splice(at, n);
                },
                collapse: function (lines) {
                    lines.push.apply(lines, this.lines);
                },
                insertInner: function (at, lines, height) {
                    this.height += height;
                    this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));
                    for (var i = 0; i < lines.length; ++i) {
                        lines[i].parent = this;
                    }
                },
                iterN: function (at, n, op) {
                    for (var e = at + n; at < e; ++at) {
                        if (op(this.lines[at])) {
                            return true;
                        }
                    }
                }
            };
            function BranchChunk(children) {
                this.children = children;
                var size = 0, height = 0;
                for (var i = 0; i < children.length; ++i) {
                    var ch = children[i];
                    size += ch.chunkSize();
                    height += ch.height;
                    ch.parent = this;
                }
                this.size = size;
                this.height = height;
                this.parent = null;
            }
            BranchChunk.prototype = {
                chunkSize: function () {
                    return this.size;
                },
                removeInner: function (at, n) {
                    this.size -= n;
                    for (var i = 0; i < this.children.length; ++i) {
                        var child = this.children[i], sz = child.chunkSize();
                        if (at < sz) {
                            var rm = Math.min(n, sz - at), oldHeight = child.height;
                            child.removeInner(at, rm);
                            this.height -= oldHeight - child.height;
                            if (sz == rm) {
                                this.children.splice(i--, 1);
                                child.parent = null;
                            }
                            if ((n -= rm) == 0) {
                                break;
                            }
                            at = 0;
                        } else {
                            at -= sz;
                        }
                    }
                    if (this.size - n < 25 && (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {
                        var lines = [];
                        this.collapse(lines);
                        this.children = [new LeafChunk(lines)];
                        this.children[0].parent = this;
                    }
                },
                collapse: function (lines) {
                    for (var i = 0; i < this.children.length; ++i) {
                        this.children[i].collapse(lines);
                    }
                },
                insertInner: function (at, lines, height) {
                    this.size += lines.length;
                    this.height += height;
                    for (var i = 0; i < this.children.length; ++i) {
                        var child = this.children[i], sz = child.chunkSize();
                        if (at <= sz) {
                            child.insertInner(at, lines, height);
                            if (child.lines && child.lines.length > 50) {
                                var remaining = child.lines.length % 25 + 25;
                                for (var pos = remaining; pos < child.lines.length; ) {
                                    var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));
                                    child.height -= leaf.height;
                                    this.children.splice(++i, 0, leaf);
                                    leaf.parent = this;
                                }
                                child.lines = child.lines.slice(0, remaining);
                                this.maybeSpill();
                            }
                            break;
                        }
                        at -= sz;
                    }
                },
                maybeSpill: function () {
                    if (this.children.length <= 10) {
                        return;
                    }
                    var me = this;
                    do {
                        var spilled = me.children.splice(me.children.length - 5, 5);
                        var sibling = new BranchChunk(spilled);
                        if (!me.parent) {
                            var copy = new BranchChunk(me.children);
                            copy.parent = me;
                            me.children = [copy, sibling];
                            me = copy;
                        } else {
                            me.size -= sibling.size;
                            me.height -= sibling.height;
                            var myIndex = indexOf(me.parent.children, me);
                            me.parent.children.splice(myIndex + 1, 0, sibling);
                        }
                        sibling.parent = me.parent;
                    } while (me.children.length > 10);
                    me.parent.maybeSpill();
                },
                iterN: function (at, n, op) {
                    for (var i = 0; i < this.children.length; ++i) {
                        var child = this.children[i], sz = child.chunkSize();
                        if (at < sz) {
                            var used = Math.min(n, sz - at);
                            if (child.iterN(at, used, op)) {
                                return true;
                            }
                            if ((n -= used) == 0) {
                                break;
                            }
                            at = 0;
                        } else {
                            at -= sz;
                        }
                    }
                }
            };
            var LineWidget = function (doc, node, options) {
                if (options) {
                    for (var opt in options) {
                        if (options.hasOwnProperty(opt)) {
                            this[opt] = options[opt];
                        }
                    }
                }
                this.doc = doc;
                this.node = node;
            };
            LineWidget.prototype.clear = function () {
                var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);
                if (no == null || !ws) {
                    return;
                }
                for (var i = 0; i < ws.length; ++i) {
                    if (ws[i] == this) {
                        ws.splice(i--, 1);
                    }
                }
                if (!ws.length) {
                    line.widgets = null;
                }
                var height = widgetHeight(this);
                updateLineHeight(line, Math.max(0, line.height - height));
                if (cm) {
                    runInOp(cm, function () {
                        adjustScrollWhenAboveVisible(cm, line, -height);
                        regLineChange(cm, no, "widget");
                    });
                    signalLater(cm, "lineWidgetCleared", cm, this, no);
                }
            };
            LineWidget.prototype.changed = function () {
                var this$1$1 = this;
                var oldH = this.height, cm = this.doc.cm, line = this.line;
                this.height = null;
                var diff = widgetHeight(this) - oldH;
                if (!diff) {
                    return;
                }
                if (!lineIsHidden(this.doc, line)) {
                    updateLineHeight(line, line.height + diff);
                }
                if (cm) {
                    runInOp(cm, function () {
                        cm.curOp.forceUpdate = true;
                        adjustScrollWhenAboveVisible(cm, line, diff);
                        signalLater(cm, "lineWidgetChanged", cm, this$1$1, lineNo(line));
                    });
                }
            };
            eventMixin(LineWidget);
            function adjustScrollWhenAboveVisible(cm, line, diff) {
                if (heightAtLine(line) < (cm.curOp && cm.curOp.scrollTop || cm.doc.scrollTop)) {
                    addToScrollTop(cm, diff);
                }
            }
            function addLineWidget(doc, handle, node, options) {
                var widget = new LineWidget(doc, node, options);
                var cm = doc.cm;
                if (cm && widget.noHScroll) {
                    cm.display.alignWidgets = true;
                }
                changeLine(doc, handle, "widget", function (line) {
                    var widgets = line.widgets || (line.widgets = []);
                    if (widget.insertAt == null) {
                        widgets.push(widget);
                    } else {
                        widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget);
                    }
                    widget.line = line;
                    if (cm && !lineIsHidden(doc, line)) {
                        var aboveVisible = heightAtLine(line) < doc.scrollTop;
                        updateLineHeight(line, line.height + widgetHeight(widget));
                        if (aboveVisible) {
                            addToScrollTop(cm, widget.height);
                        }
                        cm.curOp.forceUpdate = true;
                    }
                    return true;
                });
                if (cm) {
                    signalLater(cm, "lineWidgetAdded", cm, widget, typeof handle == "number" ? handle : lineNo(handle));
                }
                return widget;
            }
            var nextMarkerId = 0;
            var TextMarker = function (doc, type) {
                this.lines = [];
                this.type = type;
                this.doc = doc;
                this.id = ++nextMarkerId;
            };
            TextMarker.prototype.clear = function () {
                if (this.explicitlyCleared) {
                    return;
                }
                var cm = this.doc.cm, withOp = cm && !cm.curOp;
                if (withOp) {
                    startOperation(cm);
                }
                if (hasHandler(this, "clear")) {
                    var found = this.find();
                    if (found) {
                        signalLater(this, "clear", found.from, found.to);
                    }
                }
                var min = null, max = null;
                for (var i = 0; i < this.lines.length; ++i) {
                    var line = this.lines[i];
                    var span = getMarkedSpanFor(line.markedSpans, this);
                    if (cm && !this.collapsed) {
                        regLineChange(cm, lineNo(line), "text");
                    } else if (cm) {
                        if (span.to != null) {
                            max = lineNo(line);
                        }
                        if (span.from != null) {
                            min = lineNo(line);
                        }
                    }
                    line.markedSpans = removeMarkedSpan(line.markedSpans, span);
                    if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm) {
                        updateLineHeight(line, textHeight(cm.display));
                    }
                }
                if (cm && this.collapsed && !cm.options.lineWrapping) {
                    for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {
                        var visual = visualLine(this.lines[i$1]), len = lineLength(visual);
                        if (len > cm.display.maxLineLength) {
                            cm.display.maxLine = visual;
                            cm.display.maxLineLength = len;
                            cm.display.maxLineChanged = true;
                        }
                    }
                }
                if (min != null && cm && this.collapsed) {
                    regChange(cm, min, max + 1);
                }
                this.lines.length = 0;
                this.explicitlyCleared = true;
                if (this.atomic && this.doc.cantEdit) {
                    this.doc.cantEdit = false;
                    if (cm) {
                        reCheckSelection(cm.doc);
                    }
                }
                if (cm) {
                    signalLater(cm, "markerCleared", cm, this, min, max);
                }
                if (withOp) {
                    endOperation(cm);
                }
                if (this.parent) {
                    this.parent.clear();
                }
            };
            TextMarker.prototype.find = function (side, lineObj) {
                if (side == null && this.type == "bookmark") {
                    side = 1;
                }
                var from, to;
                for (var i = 0; i < this.lines.length; ++i) {
                    var line = this.lines[i];
                    var span = getMarkedSpanFor(line.markedSpans, this);
                    if (span.from != null) {
                        from = Pos(lineObj ? line : lineNo(line), span.from);
                        if (side == -1) {
                            return from;
                        }
                    }
                    if (span.to != null) {
                        to = Pos(lineObj ? line : lineNo(line), span.to);
                        if (side == 1) {
                            return to;
                        }
                    }
                }
                return from && ({
                    from: from,
                    to: to
                });
            };
            TextMarker.prototype.changed = function () {
                var this$1$1 = this;
                var pos = this.find(-1, true), widget = this, cm = this.doc.cm;
                if (!pos || !cm) {
                    return;
                }
                runInOp(cm, function () {
                    var line = pos.line, lineN = lineNo(pos.line);
                    var view = findViewForLine(cm, lineN);
                    if (view) {
                        clearLineMeasurementCacheFor(view);
                        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;
                    }
                    cm.curOp.updateMaxLine = true;
                    if (!lineIsHidden(widget.doc, line) && widget.height != null) {
                        var oldHeight = widget.height;
                        widget.height = null;
                        var dHeight = widgetHeight(widget) - oldHeight;
                        if (dHeight) {
                            updateLineHeight(line, line.height + dHeight);
                        }
                    }
                    signalLater(cm, "markerChanged", cm, this$1$1);
                });
            };
            TextMarker.prototype.attachLine = function (line) {
                if (!this.lines.length && this.doc.cm) {
                    var op = this.doc.cm.curOp;
                    if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1) {
                        (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this);
                    }
                }
                this.lines.push(line);
            };
            TextMarker.prototype.detachLine = function (line) {
                this.lines.splice(indexOf(this.lines, line), 1);
                if (!this.lines.length && this.doc.cm) {
                    var op = this.doc.cm.curOp;
                    (op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);
                }
            };
            eventMixin(TextMarker);
            function markText(doc, from, to, options, type) {
                if (options && options.shared) {
                    return markTextShared(doc, from, to, options, type);
                }
                if (doc.cm && !doc.cm.curOp) {
                    return operation(doc.cm, markText)(doc, from, to, options, type);
                }
                var marker = new TextMarker(doc, type), diff = cmp(from, to);
                if (options) {
                    copyObj(options, marker, false);
                }
                if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false) {
                    return marker;
                }
                if (marker.replacedWith) {
                    marker.collapsed = true;
                    marker.widgetNode = eltP("span", [marker.replacedWith], "CodeMirror-widget");
                    if (!options.handleMouseEvents) {
                        marker.widgetNode.setAttribute("cm-ignore-events", "true");
                    }
                    if (options.insertLeft) {
                        marker.widgetNode.insertLeft = true;
                    }
                }
                if (marker.collapsed) {
                    if (conflictingCollapsedRange(doc, from.line, from, to, marker) || from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker)) {
                        throw new Error("Inserting collapsed marker partially overlapping an existing one");
                    }
                    seeCollapsedSpans();
                }
                if (marker.addToHistory) {
                    addChangeToHistory(doc, {
                        from: from,
                        to: to,
                        origin: "markText"
                    }, doc.sel, NaN);
                }
                var curLine = from.line, cm = doc.cm, updateMaxLine;
                doc.iter(curLine, to.line + 1, function (line) {
                    if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine) {
                        updateMaxLine = true;
                    }
                    if (marker.collapsed && curLine != from.line) {
                        updateLineHeight(line, 0);
                    }
                    addMarkedSpan(line, new MarkedSpan(marker, curLine == from.line ? from.ch : null, curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);
                    ++curLine;
                });
                if (marker.collapsed) {
                    doc.iter(from.line, to.line + 1, function (line) {
                        if (lineIsHidden(doc, line)) {
                            updateLineHeight(line, 0);
                        }
                    });
                }
                if (marker.clearOnEnter) {
                    on(marker, "beforeCursorEnter", function () {
                        return marker.clear();
                    });
                }
                if (marker.readOnly) {
                    seeReadOnlySpans();
                    if (doc.history.done.length || doc.history.undone.length) {
                        doc.clearHistory();
                    }
                }
                if (marker.collapsed) {
                    marker.id = ++nextMarkerId;
                    marker.atomic = true;
                }
                if (cm) {
                    if (updateMaxLine) {
                        cm.curOp.updateMaxLine = true;
                    }
                    if (marker.collapsed) {
                        regChange(cm, from.line, to.line + 1);
                    } else if (marker.className || marker.startStyle || marker.endStyle || marker.css || marker.attributes || marker.title) {
                        for (var i = from.line; i <= to.line; i++) {
                            regLineChange(cm, i, "text");
                        }
                    }
                    if (marker.atomic) {
                        reCheckSelection(cm.doc);
                    }
                    signalLater(cm, "markerAdded", cm, marker);
                }
                return marker;
            }
            var SharedTextMarker = function (markers, primary) {
                this.markers = markers;
                this.primary = primary;
                for (var i = 0; i < markers.length; ++i) {
                    markers[i].parent = this;
                }
            };
            SharedTextMarker.prototype.clear = function () {
                if (this.explicitlyCleared) {
                    return;
                }
                this.explicitlyCleared = true;
                for (var i = 0; i < this.markers.length; ++i) {
                    this.markers[i].clear();
                }
                signalLater(this, "clear");
            };
            SharedTextMarker.prototype.find = function (side, lineObj) {
                return this.primary.find(side, lineObj);
            };
            eventMixin(SharedTextMarker);
            function markTextShared(doc, from, to, options, type) {
                options = copyObj(options);
                options.shared = false;
                var markers = [markText(doc, from, to, options, type)], primary = markers[0];
                var widget = options.widgetNode;
                linkedDocs(doc, function (doc) {
                    if (widget) {
                        options.widgetNode = widget.cloneNode(true);
                    }
                    markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));
                    for (var i = 0; i < doc.linked.length; ++i) {
                        if (doc.linked[i].isParent) {
                            return;
                        }
                    }
                    primary = lst(markers);
                });
                return new SharedTextMarker(markers, primary);
            }
            function findSharedMarkers(doc) {
                return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) {
                    return m.parent;
                });
            }
            function copySharedMarkers(doc, markers) {
                for (var i = 0; i < markers.length; i++) {
                    var marker = markers[i], pos = marker.find();
                    var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);
                    if (cmp(mFrom, mTo)) {
                        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);
                        marker.markers.push(subMark);
                        subMark.parent = marker;
                    }
                }
            }
            function detachSharedMarkers(markers) {
                var loop = function (i) {
                    var marker = markers[i], linked = [marker.primary.doc];
                    linkedDocs(marker.primary.doc, function (d) {
                        return linked.push(d);
                    });
                    for (var j = 0; j < marker.markers.length; j++) {
                        var subMarker = marker.markers[j];
                        if (indexOf(linked, subMarker.doc) == -1) {
                            subMarker.parent = null;
                            marker.markers.splice(j--, 1);
                        }
                    }
                };
                for (var i = 0; i < markers.length; i++) loop(i);
            }
            var nextDocId = 0;
            var Doc = function (text, mode, firstLine, lineSep, direction) {
                if (!(this instanceof Doc)) {
                    return new Doc(text, mode, firstLine, lineSep, direction);
                }
                if (firstLine == null) {
                    firstLine = 0;
                }
                BranchChunk.call(this, [new LeafChunk([new Line("", null)])]);
                this.first = firstLine;
                this.scrollTop = this.scrollLeft = 0;
                this.cantEdit = false;
                this.cleanGeneration = 1;
                this.modeFrontier = this.highlightFrontier = firstLine;
                var start = Pos(firstLine, 0);
                this.sel = simpleSelection(start);
                this.history = new History(null);
                this.id = ++nextDocId;
                this.modeOption = mode;
                this.lineSep = lineSep;
                this.direction = direction == "rtl" ? "rtl" : "ltr";
                this.extend = false;
                if (typeof text == "string") {
                    text = this.splitLines(text);
                }
                updateDoc(this, {
                    from: start,
                    to: start,
                    text: text
                });
                setSelection(this, simpleSelection(start), sel_dontScroll);
            };
            Doc.prototype = createObj(BranchChunk.prototype, {
                constructor: Doc,
                iter: function (from, to, op) {
                    if (op) {
                        this.iterN(from - this.first, to - from, op);
                    } else {
                        this.iterN(this.first, this.first + this.size, from);
                    }
                },
                insert: function (at, lines) {
                    var height = 0;
                    for (var i = 0; i < lines.length; ++i) {
                        height += lines[i].height;
                    }
                    this.insertInner(at - this.first, lines, height);
                },
                remove: function (at, n) {
                    this.removeInner(at - this.first, n);
                },
                getValue: function (lineSep) {
                    var lines = getLines(this, this.first, this.first + this.size);
                    if (lineSep === false) {
                        return lines;
                    }
                    return lines.join(lineSep || this.lineSeparator());
                },
                setValue: docMethodOp(function (code) {
                    var top = Pos(this.first, 0), last = this.first + this.size - 1;
                    makeChange(this, {
                        from: top,
                        to: Pos(last, getLine(this, last).text.length),
                        text: this.splitLines(code),
                        origin: "setValue",
                        full: true
                    }, true);
                    if (this.cm) {
                        scrollToCoords(this.cm, 0, 0);
                    }
                    setSelection(this, simpleSelection(top), sel_dontScroll);
                }),
                replaceRange: function (code, from, to, origin) {
                    from = clipPos(this, from);
                    to = to ? clipPos(this, to) : from;
                    replaceRange(this, code, from, to, origin);
                },
                getRange: function (from, to, lineSep) {
                    var lines = getBetween(this, clipPos(this, from), clipPos(this, to));
                    if (lineSep === false) {
                        return lines;
                    }
                    if (lineSep === '') {
                        return lines.join('');
                    }
                    return lines.join(lineSep || this.lineSeparator());
                },
                getLine: function (line) {
                    var l = this.getLineHandle(line);
                    return l && l.text;
                },
                getLineHandle: function (line) {
                    if (isLine(this, line)) {
                        return getLine(this, line);
                    }
                },
                getLineNumber: function (line) {
                    return lineNo(line);
                },
                getLineHandleVisualStart: function (line) {
                    if (typeof line == "number") {
                        line = getLine(this, line);
                    }
                    return visualLine(line);
                },
                lineCount: function () {
                    return this.size;
                },
                firstLine: function () {
                    return this.first;
                },
                lastLine: function () {
                    return this.first + this.size - 1;
                },
                clipPos: function (pos) {
                    return clipPos(this, pos);
                },
                getCursor: function (start) {
                    var range = this.sel.primary(), pos;
                    if (start == null || start == "head") {
                        pos = range.head;
                    } else if (start == "anchor") {
                        pos = range.anchor;
                    } else if (start == "end" || start == "to" || start === false) {
                        pos = range.to();
                    } else {
                        pos = range.from();
                    }
                    return pos;
                },
                listSelections: function () {
                    return this.sel.ranges;
                },
                somethingSelected: function () {
                    return this.sel.somethingSelected();
                },
                setCursor: docMethodOp(function (line, ch, options) {
                    setSimpleSelection(this, clipPos(this, typeof line == "number" ? Pos(line, ch || 0) : line), null, options);
                }),
                setSelection: docMethodOp(function (anchor, head, options) {
                    setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);
                }),
                extendSelection: docMethodOp(function (head, other, options) {
                    extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);
                }),
                extendSelections: docMethodOp(function (heads, options) {
                    extendSelections(this, clipPosArray(this, heads), options);
                }),
                extendSelectionsBy: docMethodOp(function (f, options) {
                    var heads = map(this.sel.ranges, f);
                    extendSelections(this, clipPosArray(this, heads), options);
                }),
                setSelections: docMethodOp(function (ranges, primary, options) {
                    if (!ranges.length) {
                        return;
                    }
                    var out = [];
                    for (var i = 0; i < ranges.length; i++) {
                        out[i] = new Range(clipPos(this, ranges[i].anchor), clipPos(this, ranges[i].head || ranges[i].anchor));
                    }
                    if (primary == null) {
                        primary = Math.min(ranges.length - 1, this.sel.primIndex);
                    }
                    setSelection(this, normalizeSelection(this.cm, out, primary), options);
                }),
                addSelection: docMethodOp(function (anchor, head, options) {
                    var ranges = this.sel.ranges.slice(0);
                    ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));
                    setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);
                }),
                getSelection: function (lineSep) {
                    var ranges = this.sel.ranges, lines;
                    for (var i = 0; i < ranges.length; i++) {
                        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
                        lines = lines ? lines.concat(sel) : sel;
                    }
                    if (lineSep === false) {
                        return lines;
                    } else {
                        return lines.join(lineSep || this.lineSeparator());
                    }
                },
                getSelections: function (lineSep) {
                    var parts = [], ranges = this.sel.ranges;
                    for (var i = 0; i < ranges.length; i++) {
                        var sel = getBetween(this, ranges[i].from(), ranges[i].to());
                        if (lineSep !== false) {
                            sel = sel.join(lineSep || this.lineSeparator());
                        }
                        parts[i] = sel;
                    }
                    return parts;
                },
                replaceSelection: function (code, collapse, origin) {
                    var dup = [];
                    for (var i = 0; i < this.sel.ranges.length; i++) {
                        dup[i] = code;
                    }
                    this.replaceSelections(dup, collapse, origin || "+input");
                },
                replaceSelections: docMethodOp(function (code, collapse, origin) {
                    var changes = [], sel = this.sel;
                    for (var i = 0; i < sel.ranges.length; i++) {
                        var range = sel.ranges[i];
                        changes[i] = {
                            from: range.from(),
                            to: range.to(),
                            text: this.splitLines(code[i]),
                            origin: origin
                        };
                    }
                    var newSel = collapse && collapse != "end" && computeReplacedSel(this, changes, collapse);
                    for (var i$1 = changes.length - 1; i$1 >= 0; i$1--) {
                        makeChange(this, changes[i$1]);
                    }
                    if (newSel) {
                        setSelectionReplaceHistory(this, newSel);
                    } else if (this.cm) {
                        ensureCursorVisible(this.cm);
                    }
                }),
                undo: docMethodOp(function () {
                    makeChangeFromHistory(this, "undo");
                }),
                redo: docMethodOp(function () {
                    makeChangeFromHistory(this, "redo");
                }),
                undoSelection: docMethodOp(function () {
                    makeChangeFromHistory(this, "undo", true);
                }),
                redoSelection: docMethodOp(function () {
                    makeChangeFromHistory(this, "redo", true);
                }),
                setExtending: function (val) {
                    this.extend = val;
                },
                getExtending: function () {
                    return this.extend;
                },
                historySize: function () {
                    var hist = this.history, done = 0, undone = 0;
                    for (var i = 0; i < hist.done.length; i++) {
                        if (!hist.done[i].ranges) {
                            ++done;
                        }
                    }
                    for (var i$1 = 0; i$1 < hist.undone.length; i$1++) {
                        if (!hist.undone[i$1].ranges) {
                            ++undone;
                        }
                    }
                    return {
                        undo: done,
                        redo: undone
                    };
                },
                clearHistory: function () {
                    var this$1$1 = this;
                    this.history = new History(this.history);
                    linkedDocs(this, function (doc) {
                        return doc.history = this$1$1.history;
                    }, true);
                },
                markClean: function () {
                    this.cleanGeneration = this.changeGeneration(true);
                },
                changeGeneration: function (forceSplit) {
                    if (forceSplit) {
                        this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null;
                    }
                    return this.history.generation;
                },
                isClean: function (gen) {
                    return this.history.generation == (gen || this.cleanGeneration);
                },
                getHistory: function () {
                    return {
                        done: copyHistoryArray(this.history.done),
                        undone: copyHistoryArray(this.history.undone)
                    };
                },
                setHistory: function (histData) {
                    var hist = this.history = new History(this.history);
                    hist.done = copyHistoryArray(histData.done.slice(0), null, true);
                    hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
                },
                setGutterMarker: docMethodOp(function (line, gutterID, value) {
                    return changeLine(this, line, "gutter", function (line) {
                        var markers = line.gutterMarkers || (line.gutterMarkers = {});
                        markers[gutterID] = value;
                        if (!value && isEmpty(markers)) {
                            line.gutterMarkers = null;
                        }
                        return true;
                    });
                }),
                clearGutter: docMethodOp(function (gutterID) {
                    var this$1$1 = this;
                    this.iter(function (line) {
                        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {
                            changeLine(this$1$1, line, "gutter", function () {
                                line.gutterMarkers[gutterID] = null;
                                if (isEmpty(line.gutterMarkers)) {
                                    line.gutterMarkers = null;
                                }
                                return true;
                            });
                        }
                    });
                }),
                lineInfo: function (line) {
                    var n;
                    if (typeof line == "number") {
                        if (!isLine(this, line)) {
                            return null;
                        }
                        n = line;
                        line = getLine(this, line);
                        if (!line) {
                            return null;
                        }
                    } else {
                        n = lineNo(line);
                        if (n == null) {
                            return null;
                        }
                    }
                    return {
                        line: n,
                        handle: line,
                        text: line.text,
                        gutterMarkers: line.gutterMarkers,
                        textClass: line.textClass,
                        bgClass: line.bgClass,
                        wrapClass: line.wrapClass,
                        widgets: line.widgets
                    };
                },
                addLineClass: docMethodOp(function (handle, where, cls) {
                    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
                        var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass";
                        if (!line[prop]) {
                            line[prop] = cls;
                        } else if (classTest(cls).test(line[prop])) {
                            return false;
                        } else {
                            line[prop] += " " + cls;
                        }
                        return true;
                    });
                }),
                removeLineClass: docMethodOp(function (handle, where, cls) {
                    return changeLine(this, handle, where == "gutter" ? "gutter" : "class", function (line) {
                        var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : where == "gutter" ? "gutterClass" : "wrapClass";
                        var cur = line[prop];
                        if (!cur) {
                            return false;
                        } else if (cls == null) {
                            line[prop] = null;
                        } else {
                            var found = cur.match(classTest(cls));
                            if (!found) {
                                return false;
                            }
                            var end = found.index + found[0].length;
                            line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
                        }
                        return true;
                    });
                }),
                addLineWidget: docMethodOp(function (handle, node, options) {
                    return addLineWidget(this, handle, node, options);
                }),
                removeLineWidget: function (widget) {
                    widget.clear();
                },
                markText: function (from, to, options) {
                    return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || "range");
                },
                setBookmark: function (pos, options) {
                    var realOpts = {
                        replacedWith: options && (options.nodeType == null ? options.widget : options),
                        insertLeft: options && options.insertLeft,
                        clearWhenEmpty: false,
                        shared: options && options.shared,
                        handleMouseEvents: options && options.handleMouseEvents
                    };
                    pos = clipPos(this, pos);
                    return markText(this, pos, pos, realOpts, "bookmark");
                },
                findMarksAt: function (pos) {
                    pos = clipPos(this, pos);
                    var markers = [], spans = getLine(this, pos.line).markedSpans;
                    if (spans) {
                        for (var i = 0; i < spans.length; ++i) {
                            var span = spans[i];
                            if ((span.from == null || span.from <= pos.ch) && (span.to == null || span.to >= pos.ch)) {
                                markers.push(span.marker.parent || span.marker);
                            }
                        }
                    }
                    return markers;
                },
                findMarks: function (from, to, filter) {
                    from = clipPos(this, from);
                    to = clipPos(this, to);
                    var found = [], lineNo = from.line;
                    this.iter(from.line, to.line + 1, function (line) {
                        var spans = line.markedSpans;
                        if (spans) {
                            for (var i = 0; i < spans.length; i++) {
                                var span = spans[i];
                                if (!(span.to != null && lineNo == from.line && from.ch >= span.to || span.from == null && lineNo != from.line || span.from != null && lineNo == to.line && span.from >= to.ch) && (!filter || filter(span.marker))) {
                                    found.push(span.marker.parent || span.marker);
                                }
                            }
                        }
                        ++lineNo;
                    });
                    return found;
                },
                getAllMarks: function () {
                    var markers = [];
                    this.iter(function (line) {
                        var sps = line.markedSpans;
                        if (sps) {
                            for (var i = 0; i < sps.length; ++i) {
                                if (sps[i].from != null) {
                                    markers.push(sps[i].marker);
                                }
                            }
                        }
                    });
                    return markers;
                },
                posFromIndex: function (off) {
                    var ch, lineNo = this.first, sepSize = this.lineSeparator().length;
                    this.iter(function (line) {
                        var sz = line.text.length + sepSize;
                        if (sz > off) {
                            ch = off;
                            return true;
                        }
                        off -= sz;
                        ++lineNo;
                    });
                    return clipPos(this, Pos(lineNo, ch));
                },
                indexFromPos: function (coords) {
                    coords = clipPos(this, coords);
                    var index = coords.ch;
                    if (coords.line < this.first || coords.ch < 0) {
                        return 0;
                    }
                    var sepSize = this.lineSeparator().length;
                    this.iter(this.first, coords.line, function (line) {
                        index += line.text.length + sepSize;
                    });
                    return index;
                },
                copy: function (copyHistory) {
                    var doc = new Doc(getLines(this, this.first, this.first + this.size), this.modeOption, this.first, this.lineSep, this.direction);
                    doc.scrollTop = this.scrollTop;
                    doc.scrollLeft = this.scrollLeft;
                    doc.sel = this.sel;
                    doc.extend = false;
                    if (copyHistory) {
                        doc.history.undoDepth = this.history.undoDepth;
                        doc.setHistory(this.getHistory());
                    }
                    return doc;
                },
                linkedDoc: function (options) {
                    if (!options) {
                        options = {};
                    }
                    var from = this.first, to = this.first + this.size;
                    if (options.from != null && options.from > from) {
                        from = options.from;
                    }
                    if (options.to != null && options.to < to) {
                        to = options.to;
                    }
                    var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);
                    if (options.sharedHist) {
                        copy.history = this.history;
                    }
                    (this.linked || (this.linked = [])).push({
                        doc: copy,
                        sharedHist: options.sharedHist
                    });
                    copy.linked = [{
                        doc: this,
                        isParent: true,
                        sharedHist: options.sharedHist
                    }];
                    copySharedMarkers(copy, findSharedMarkers(this));
                    return copy;
                },
                unlinkDoc: function (other) {
                    if (other instanceof CodeMirror) {
                        other = other.doc;
                    }
                    if (this.linked) {
                        for (var i = 0; i < this.linked.length; ++i) {
                            var link = this.linked[i];
                            if (link.doc != other) {
                                continue;
                            }
                            this.linked.splice(i, 1);
                            other.unlinkDoc(this);
                            detachSharedMarkers(findSharedMarkers(this));
                            break;
                        }
                    }
                    if (other.history == this.history) {
                        var splitIds = [other.id];
                        linkedDocs(other, function (doc) {
                            return splitIds.push(doc.id);
                        }, true);
                        other.history = new History(null);
                        other.history.done = copyHistoryArray(this.history.done, splitIds);
                        other.history.undone = copyHistoryArray(this.history.undone, splitIds);
                    }
                },
                iterLinkedDocs: function (f) {
                    linkedDocs(this, f);
                },
                getMode: function () {
                    return this.mode;
                },
                getEditor: function () {
                    return this.cm;
                },
                splitLines: function (str) {
                    if (this.lineSep) {
                        return str.split(this.lineSep);
                    }
                    return splitLinesAuto(str);
                },
                lineSeparator: function () {
                    return this.lineSep || "\n";
                },
                setDirection: docMethodOp(function (dir) {
                    if (dir != "rtl") {
                        dir = "ltr";
                    }
                    if (dir == this.direction) {
                        return;
                    }
                    this.direction = dir;
                    this.iter(function (line) {
                        return line.order = null;
                    });
                    if (this.cm) {
                        directionChanged(this.cm);
                    }
                })
            });
            Doc.prototype.eachLine = Doc.prototype.iter;
            var lastDrop = 0;
            function onDrop(e) {
                var cm = this;
                clearDragCursor(cm);
                if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {
                    return;
                }
                e_preventDefault(e);
                if (ie) {
                    lastDrop = +new Date();
                }
                var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;
                if (!pos || cm.isReadOnly()) {
                    return;
                }
                if (files && files.length && window.FileReader && window.File) {
                    var n = files.length, text = Array(n), read = 0;
                    var markAsReadAndPasteIfAllFilesAreRead = function () {
                        if (++read == n) {
                            operation(cm, function () {
                                pos = clipPos(cm.doc, pos);
                                var change = {
                                    from: pos,
                                    to: pos,
                                    text: cm.doc.splitLines(text.filter(function (t) {
                                        return t != null;
                                    }).join(cm.doc.lineSeparator())),
                                    origin: "paste"
                                };
                                makeChange(cm.doc, change);
                                setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));
                            })();
                        }
                    };
                    var readTextFromFile = function (file, i) {
                        if (cm.options.allowDropFileTypes && indexOf(cm.options.allowDropFileTypes, file.type) == -1) {
                            markAsReadAndPasteIfAllFilesAreRead();
                            return;
                        }
                        var reader = new FileReader();
                        reader.onerror = function () {
                            return markAsReadAndPasteIfAllFilesAreRead();
                        };
                        reader.onload = function () {
                            var content = reader.result;
                            if ((/[\x00-\x08\x0e-\x1f]{2}/).test(content)) {
                                markAsReadAndPasteIfAllFilesAreRead();
                                return;
                            }
                            text[i] = content;
                            markAsReadAndPasteIfAllFilesAreRead();
                        };
                        reader.readAsText(file);
                    };
                    for (var i = 0; i < files.length; i++) {
                        readTextFromFile(files[i], i);
                    }
                } else {
                    if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {
                        cm.state.draggingText(e);
                        setTimeout(function () {
                            return cm.display.input.focus();
                        }, 20);
                        return;
                    }
                    try {
                        var text$1 = e.dataTransfer.getData("Text");
                        if (text$1) {
                            var selected;
                            if (cm.state.draggingText && !cm.state.draggingText.copy) {
                                selected = cm.listSelections();
                            }
                            setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));
                            if (selected) {
                                for (var i$1 = 0; i$1 < selected.length; ++i$1) {
                                    replaceRange(cm.doc, "", selected[i$1].anchor, selected[i$1].head, "drag");
                                }
                            }
                            cm.replaceSelection(text$1, "around", "paste");
                            cm.display.input.focus();
                        }
                    } catch (e$1) {}
                }
            }
            function onDragStart(cm, e) {
                if (ie && (!cm.state.draggingText || +new Date() - lastDrop < 100)) {
                    e_stop(e);
                    return;
                }
                if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) {
                    return;
                }
                e.dataTransfer.setData("Text", cm.getSelection());
                e.dataTransfer.effectAllowed = "copyMove";
                if (e.dataTransfer.setDragImage && !safari) {
                    var img = elt("img", null, null, "position: fixed; left: 0; top: 0;");
                    img.src = "";
                    if (presto) {
                        img.width = img.height = 1;
                        cm.display.wrapper.appendChild(img);
                        img._top = img.offsetTop;
                    }
                    e.dataTransfer.setDragImage(img, 0, 0);
                    if (presto) {
                        img.parentNode.removeChild(img);
                    }
                }
            }
            function onDragOver(cm, e) {
                var pos = posFromMouse(cm, e);
                if (!pos) {
                    return;
                }
                var frag = document.createDocumentFragment();
                drawSelectionCursor(cm, pos, frag);
                if (!cm.display.dragCursor) {
                    cm.display.dragCursor = elt("div", null, "CodeMirror-cursors CodeMirror-dragcursors");
                    cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);
                }
                removeChildrenAndAdd(cm.display.dragCursor, frag);
            }
            function clearDragCursor(cm) {
                if (cm.display.dragCursor) {
                    cm.display.lineSpace.removeChild(cm.display.dragCursor);
                    cm.display.dragCursor = null;
                }
            }
            function forEachCodeMirror(f) {
                if (!document.getElementsByClassName) {
                    return;
                }
                var byClass = document.getElementsByClassName("CodeMirror"), editors = [];
                for (var i = 0; i < byClass.length; i++) {
                    var cm = byClass[i].CodeMirror;
                    if (cm) {
                        editors.push(cm);
                    }
                }
                if (editors.length) {
                    editors[0].operation(function () {
                        for (var i = 0; i < editors.length; i++) {
                            f(editors[i]);
                        }
                    });
                }
            }
            var globalsRegistered = false;
            function ensureGlobalHandlers() {
                if (globalsRegistered) {
                    return;
                }
                registerGlobalHandlers();
                globalsRegistered = true;
            }
            function registerGlobalHandlers() {
                var resizeTimer;
                on(window, "resize", function () {
                    if (resizeTimer == null) {
                        resizeTimer = setTimeout(function () {
                            resizeTimer = null;
                            forEachCodeMirror(onResize);
                        }, 100);
                    }
                });
                on(window, "blur", function () {
                    return forEachCodeMirror(onBlur);
                });
            }
            function onResize(cm) {
                var d = cm.display;
                d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;
                d.scrollbarsClipped = false;
                cm.setSize();
            }
            var keyNames = {
                3: "Pause",
                8: "Backspace",
                9: "Tab",
                13: "Enter",
                16: "Shift",
                17: "Ctrl",
                18: "Alt",
                19: "Pause",
                20: "CapsLock",
                27: "Esc",
                32: "Space",
                33: "PageUp",
                34: "PageDown",
                35: "End",
                36: "Home",
                37: "Left",
                38: "Up",
                39: "Right",
                40: "Down",
                44: "PrintScrn",
                45: "Insert",
                46: "Delete",
                59: ";",
                61: "=",
                91: "Mod",
                92: "Mod",
                93: "Mod",
                106: "*",
                107: "=",
                109: "-",
                110: ".",
                111: "/",
                145: "ScrollLock",
                173: "-",
                186: ";",
                187: "=",
                188: ",",
                189: "-",
                190: ".",
                191: "/",
                192: "`",
                219: "[",
                220: "\\",
                221: "]",
                222: "'",
                224: "Mod",
                63232: "Up",
                63233: "Down",
                63234: "Left",
                63235: "Right",
                63272: "Delete",
                63273: "Home",
                63275: "End",
                63276: "PageUp",
                63277: "PageDown",
                63302: "Insert"
            };
            for (var i = 0; i < 10; i++) {
                keyNames[i + 48] = keyNames[i + 96] = String(i);
            }
            for (var i$1 = 65; i$1 <= 90; i$1++) {
                keyNames[i$1] = String.fromCharCode(i$1);
            }
            for (var i$2 = 1; i$2 <= 12; i$2++) {
                keyNames[i$2 + 111] = keyNames[i$2 + 63235] = "F" + i$2;
            }
            var keyMap = {};
            keyMap.basic = {
                "Left": "goCharLeft",
                "Right": "goCharRight",
                "Up": "goLineUp",
                "Down": "goLineDown",
                "End": "goLineEnd",
                "Home": "goLineStartSmart",
                "PageUp": "goPageUp",
                "PageDown": "goPageDown",
                "Delete": "delCharAfter",
                "Backspace": "delCharBefore",
                "Shift-Backspace": "delCharBefore",
                "Tab": "defaultTab",
                "Shift-Tab": "indentAuto",
                "Enter": "newlineAndIndent",
                "Insert": "toggleOverwrite",
                "Esc": "singleSelection"
            };
            keyMap.pcDefault = {
                "Ctrl-A": "selectAll",
                "Ctrl-D": "deleteLine",
                "Ctrl-Z": "undo",
                "Shift-Ctrl-Z": "redo",
                "Ctrl-Y": "redo",
                "Ctrl-Home": "goDocStart",
                "Ctrl-End": "goDocEnd",
                "Ctrl-Up": "goLineUp",
                "Ctrl-Down": "goLineDown",
                "Ctrl-Left": "goGroupLeft",
                "Ctrl-Right": "goGroupRight",
                "Alt-Left": "goLineStart",
                "Alt-Right": "goLineEnd",
                "Ctrl-Backspace": "delGroupBefore",
                "Ctrl-Delete": "delGroupAfter",
                "Ctrl-S": "save",
                "Ctrl-F": "find",
                "Ctrl-G": "findNext",
                "Shift-Ctrl-G": "findPrev",
                "Shift-Ctrl-F": "replace",
                "Shift-Ctrl-R": "replaceAll",
                "Ctrl-[": "indentLess",
                "Ctrl-]": "indentMore",
                "Ctrl-U": "undoSelection",
                "Shift-Ctrl-U": "redoSelection",
                "Alt-U": "redoSelection",
                "fallthrough": "basic"
            };
            keyMap.emacsy = {
                "Ctrl-F": "goCharRight",
                "Ctrl-B": "goCharLeft",
                "Ctrl-P": "goLineUp",
                "Ctrl-N": "goLineDown",
                "Ctrl-A": "goLineStart",
                "Ctrl-E": "goLineEnd",
                "Ctrl-V": "goPageDown",
                "Shift-Ctrl-V": "goPageUp",
                "Ctrl-D": "delCharAfter",
                "Ctrl-H": "delCharBefore",
                "Alt-Backspace": "delWordBefore",
                "Ctrl-K": "killLine",
                "Ctrl-T": "transposeChars",
                "Ctrl-O": "openLine"
            };
            keyMap.macDefault = {
                "Cmd-A": "selectAll",
                "Cmd-D": "deleteLine",
                "Cmd-Z": "undo",
                "Shift-Cmd-Z": "redo",
                "Cmd-Y": "redo",
                "Cmd-Home": "goDocStart",
                "Cmd-Up": "goDocStart",
                "Cmd-End": "goDocEnd",
                "Cmd-Down": "goDocEnd",
                "Alt-Left": "goGroupLeft",
                "Alt-Right": "goGroupRight",
                "Cmd-Left": "goLineLeft",
                "Cmd-Right": "goLineRight",
                "Alt-Backspace": "delGroupBefore",
                "Ctrl-Alt-Backspace": "delGroupAfter",
                "Alt-Delete": "delGroupAfter",
                "Cmd-S": "save",
                "Cmd-F": "find",
                "Cmd-G": "findNext",
                "Shift-Cmd-G": "findPrev",
                "Cmd-Alt-F": "replace",
                "Shift-Cmd-Alt-F": "replaceAll",
                "Cmd-[": "indentLess",
                "Cmd-]": "indentMore",
                "Cmd-Backspace": "delWrappedLineLeft",
                "Cmd-Delete": "delWrappedLineRight",
                "Cmd-U": "undoSelection",
                "Shift-Cmd-U": "redoSelection",
                "Ctrl-Up": "goDocStart",
                "Ctrl-Down": "goDocEnd",
                "fallthrough": ["basic", "emacsy"]
            };
            keyMap["default"] = mac ? keyMap.macDefault : keyMap.pcDefault;
            function normalizeKeyName(name) {
                var parts = name.split(/-(?!$)/);
                name = parts[parts.length - 1];
                var alt, ctrl, shift, cmd;
                for (var i = 0; i < parts.length - 1; i++) {
                    var mod = parts[i];
                    if ((/^(cmd|meta|m)$/i).test(mod)) {
                        cmd = true;
                    } else if ((/^a(lt)?$/i).test(mod)) {
                        alt = true;
                    } else if ((/^(c|ctrl|control)$/i).test(mod)) {
                        ctrl = true;
                    } else if ((/^s(hift)?$/i).test(mod)) {
                        shift = true;
                    } else {
                        throw new Error("Unrecognized modifier name: " + mod);
                    }
                }
                if (alt) {
                    name = "Alt-" + name;
                }
                if (ctrl) {
                    name = "Ctrl-" + name;
                }
                if (cmd) {
                    name = "Cmd-" + name;
                }
                if (shift) {
                    name = "Shift-" + name;
                }
                return name;
            }
            function normalizeKeyMap(keymap) {
                var copy = {};
                for (var keyname in keymap) {
                    if (keymap.hasOwnProperty(keyname)) {
                        var value = keymap[keyname];
                        if ((/^(name|fallthrough|(de|at)tach)$/).test(keyname)) {
                            continue;
                        }
                        if (value == "...") {
                            delete keymap[keyname];
                            continue;
                        }
                        var keys = map(keyname.split(" "), normalizeKeyName);
                        for (var i = 0; i < keys.length; i++) {
                            var val = void 0, name = void 0;
                            if (i == keys.length - 1) {
                                name = keys.join(" ");
                                val = value;
                            } else {
                                name = keys.slice(0, i + 1).join(" ");
                                val = "...";
                            }
                            var prev = copy[name];
                            if (!prev) {
                                copy[name] = val;
                            } else if (prev != val) {
                                throw new Error("Inconsistent bindings for " + name);
                            }
                        }
                        delete keymap[keyname];
                    }
                }
                for (var prop in copy) {
                    keymap[prop] = copy[prop];
                }
                return keymap;
            }
            function lookupKey(key, map, handle, context) {
                map = getKeyMap(map);
                var found = map.call ? map.call(key, context) : map[key];
                if (found === false) {
                    return "nothing";
                }
                if (found === "...") {
                    return "multi";
                }
                if (found != null && handle(found)) {
                    return "handled";
                }
                if (map.fallthrough) {
                    if (Object.prototype.toString.call(map.fallthrough) != "[object Array]") {
                        return lookupKey(key, map.fallthrough, handle, context);
                    }
                    for (var i = 0; i < map.fallthrough.length; i++) {
                        var result = lookupKey(key, map.fallthrough[i], handle, context);
                        if (result) {
                            return result;
                        }
                    }
                }
            }
            function isModifierKey(value) {
                var name = typeof value == "string" ? value : keyNames[value.keyCode];
                return name == "Ctrl" || name == "Alt" || name == "Shift" || name == "Mod";
            }
            function addModifierNames(name, event, noShift) {
                var base = name;
                if (event.altKey && base != "Alt") {
                    name = "Alt-" + name;
                }
                if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != "Ctrl") {
                    name = "Ctrl-" + name;
                }
                if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != "Mod") {
                    name = "Cmd-" + name;
                }
                if (!noShift && event.shiftKey && base != "Shift") {
                    name = "Shift-" + name;
                }
                return name;
            }
            function keyName(event, noShift) {
                if (presto && event.keyCode == 34 && event["char"]) {
                    return false;
                }
                var name = keyNames[event.keyCode];
                if (name == null || event.altGraphKey) {
                    return false;
                }
                if (event.keyCode == 3 && event.code) {
                    name = event.code;
                }
                return addModifierNames(name, event, noShift);
            }
            function getKeyMap(val) {
                return typeof val == "string" ? keyMap[val] : val;
            }
            function deleteNearSelection(cm, compute) {
                var ranges = cm.doc.sel.ranges, kill = [];
                for (var i = 0; i < ranges.length; i++) {
                    var toKill = compute(ranges[i]);
                    while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {
                        var replaced = kill.pop();
                        if (cmp(replaced.from, toKill.from) < 0) {
                            toKill.from = replaced.from;
                            break;
                        }
                    }
                    kill.push(toKill);
                }
                runInOp(cm, function () {
                    for (var i = kill.length - 1; i >= 0; i--) {
                        replaceRange(cm.doc, "", kill[i].from, kill[i].to, "+delete");
                    }
                    ensureCursorVisible(cm);
                });
            }
            function moveCharLogically(line, ch, dir) {
                var target = skipExtendingChars(line.text, ch + dir, dir);
                return target < 0 || target > line.text.length ? null : target;
            }
            function moveLogically(line, start, dir) {
                var ch = moveCharLogically(line, start.ch, dir);
                return ch == null ? null : new Pos(start.line, ch, dir < 0 ? "after" : "before");
            }
            function endOfLine(visually, cm, lineObj, lineNo, dir) {
                if (visually) {
                    if (cm.doc.direction == "rtl") {
                        dir = -dir;
                    }
                    var order = getOrder(lineObj, cm.doc.direction);
                    if (order) {
                        var part = dir < 0 ? lst(order) : order[0];
                        var moveInStorageOrder = dir < 0 == (part.level == 1);
                        var sticky = moveInStorageOrder ? "after" : "before";
                        var ch;
                        if (part.level > 0 || cm.doc.direction == "rtl") {
                            var prep = prepareMeasureForLine(cm, lineObj);
                            ch = dir < 0 ? lineObj.text.length - 1 : 0;
                            var targetTop = measureCharPrepared(cm, prep, ch).top;
                            ch = findFirst(function (ch) {
                                return measureCharPrepared(cm, prep, ch).top == targetTop;
                            }, dir < 0 == (part.level == 1) ? part.from : part.to - 1, ch);
                            if (sticky == "before") {
                                ch = moveCharLogically(lineObj, ch, 1);
                            }
                        } else {
                            ch = dir < 0 ? part.to : part.from;
                        }
                        return new Pos(lineNo, ch, sticky);
                    }
                }
                return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? "before" : "after");
            }
            function moveVisually(cm, line, start, dir) {
                var bidi = getOrder(line, cm.doc.direction);
                if (!bidi) {
                    return moveLogically(line, start, dir);
                }
                if (start.ch >= line.text.length) {
                    start.ch = line.text.length;
                    start.sticky = "before";
                } else if (start.ch <= 0) {
                    start.ch = 0;
                    start.sticky = "after";
                }
                var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];
                if (cm.doc.direction == "ltr" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {
                    return moveLogically(line, start, dir);
                }
                var mv = function (pos, dir) {
                    return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir);
                };
                var prep;
                var getWrappedLineExtent = function (ch) {
                    if (!cm.options.lineWrapping) {
                        return {
                            begin: 0,
                            end: line.text.length
                        };
                    }
                    prep = prep || prepareMeasureForLine(cm, line);
                    return wrappedLineExtentChar(cm, line, prep, ch);
                };
                var wrappedLineExtent = getWrappedLineExtent(start.sticky == "before" ? mv(start, -1) : start.ch);
                if (cm.doc.direction == "rtl" || part.level == 1) {
                    var moveInStorageOrder = part.level == 1 == dir < 0;
                    var ch = mv(start, moveInStorageOrder ? 1 : -1);
                    if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {
                        var sticky = moveInStorageOrder ? "before" : "after";
                        return new Pos(start.line, ch, sticky);
                    }
                }
                var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {
                    var getRes = function (ch, moveInStorageOrder) {
                        return moveInStorageOrder ? new Pos(start.line, mv(ch, 1), "before") : new Pos(start.line, ch, "after");
                    };
                    for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {
                        var part = bidi[partPos];
                        var moveInStorageOrder = dir > 0 == (part.level != 1);
                        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);
                        if (part.from <= ch && ch < part.to) {
                            return getRes(ch, moveInStorageOrder);
                        }
                        ch = moveInStorageOrder ? part.from : mv(part.to, -1);
                        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) {
                            return getRes(ch, moveInStorageOrder);
                        }
                    }
                };
                var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);
                if (res) {
                    return res;
                }
                var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);
                if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {
                    res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));
                    if (res) {
                        return res;
                    }
                }
                return null;
            }
            var commands = {
                selectAll: selectAll,
                singleSelection: function (cm) {
                    return cm.setSelection(cm.getCursor("anchor"), cm.getCursor("head"), sel_dontScroll);
                },
                killLine: function (cm) {
                    return deleteNearSelection(cm, function (range) {
                        if (range.empty()) {
                            var len = getLine(cm.doc, range.head.line).text.length;
                            if (range.head.ch == len && range.head.line < cm.lastLine()) {
                                return {
                                    from: range.head,
                                    to: Pos(range.head.line + 1, 0)
                                };
                            } else {
                                return {
                                    from: range.head,
                                    to: Pos(range.head.line, len)
                                };
                            }
                        } else {
                            return {
                                from: range.from(),
                                to: range.to()
                            };
                        }
                    });
                },
                deleteLine: function (cm) {
                    return deleteNearSelection(cm, function (range) {
                        return {
                            from: Pos(range.from().line, 0),
                            to: clipPos(cm.doc, Pos(range.to().line + 1, 0))
                        };
                    });
                },
                delLineLeft: function (cm) {
                    return deleteNearSelection(cm, function (range) {
                        return {
                            from: Pos(range.from().line, 0),
                            to: range.from()
                        };
                    });
                },
                delWrappedLineLeft: function (cm) {
                    return deleteNearSelection(cm, function (range) {
                        var top = cm.charCoords(range.head, "div").top + 5;
                        var leftPos = cm.coordsChar({
                            left: 0,
                            top: top
                        }, "div");
                        return {
                            from: leftPos,
                            to: range.from()
                        };
                    });
                },
                delWrappedLineRight: function (cm) {
                    return deleteNearSelection(cm, function (range) {
                        var top = cm.charCoords(range.head, "div").top + 5;
                        var rightPos = cm.coordsChar({
                            left: cm.display.lineDiv.offsetWidth + 100,
                            top: top
                        }, "div");
                        return {
                            from: range.from(),
                            to: rightPos
                        };
                    });
                },
                undo: function (cm) {
                    return cm.undo();
                },
                redo: function (cm) {
                    return cm.redo();
                },
                undoSelection: function (cm) {
                    return cm.undoSelection();
                },
                redoSelection: function (cm) {
                    return cm.redoSelection();
                },
                goDocStart: function (cm) {
                    return cm.extendSelection(Pos(cm.firstLine(), 0));
                },
                goDocEnd: function (cm) {
                    return cm.extendSelection(Pos(cm.lastLine()));
                },
                goLineStart: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        return lineStart(cm, range.head.line);
                    }, {
                        origin: "+move",
                        bias: 1
                    });
                },
                goLineStartSmart: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        return lineStartSmart(cm, range.head);
                    }, {
                        origin: "+move",
                        bias: 1
                    });
                },
                goLineEnd: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        return lineEnd(cm, range.head.line);
                    }, {
                        origin: "+move",
                        bias: -1
                    });
                },
                goLineRight: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        var top = cm.cursorCoords(range.head, "div").top + 5;
                        return cm.coordsChar({
                            left: cm.display.lineDiv.offsetWidth + 100,
                            top: top
                        }, "div");
                    }, sel_move);
                },
                goLineLeft: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        var top = cm.cursorCoords(range.head, "div").top + 5;
                        return cm.coordsChar({
                            left: 0,
                            top: top
                        }, "div");
                    }, sel_move);
                },
                goLineLeftSmart: function (cm) {
                    return cm.extendSelectionsBy(function (range) {
                        var top = cm.cursorCoords(range.head, "div").top + 5;
                        var pos = cm.coordsChar({
                            left: 0,
                            top: top
                        }, "div");
                        if (pos.ch < cm.getLine(pos.line).search(/\S/)) {
                            return lineStartSmart(cm, range.head);
                        }
                        return pos;
                    }, sel_move);
                },
                goLineUp: function (cm) {
                    return cm.moveV(-1, "line");
                },
                goLineDown: function (cm) {
                    return cm.moveV(1, "line");
                },
                goPageUp: function (cm) {
                    return cm.moveV(-1, "page");
                },
                goPageDown: function (cm) {
                    return cm.moveV(1, "page");
                },
                goCharLeft: function (cm) {
                    return cm.moveH(-1, "char");
                },
                goCharRight: function (cm) {
                    return cm.moveH(1, "char");
                },
                goColumnLeft: function (cm) {
                    return cm.moveH(-1, "column");
                },
                goColumnRight: function (cm) {
                    return cm.moveH(1, "column");
                },
                goWordLeft: function (cm) {
                    return cm.moveH(-1, "word");
                },
                goGroupRight: function (cm) {
                    return cm.moveH(1, "group");
                },
                goGroupLeft: function (cm) {
                    return cm.moveH(-1, "group");
                },
                goWordRight: function (cm) {
                    return cm.moveH(1, "word");
                },
                delCharBefore: function (cm) {
                    return cm.deleteH(-1, "codepoint");
                },
                delCharAfter: function (cm) {
                    return cm.deleteH(1, "char");
                },
                delWordBefore: function (cm) {
                    return cm.deleteH(-1, "word");
                },
                delWordAfter: function (cm) {
                    return cm.deleteH(1, "word");
                },
                delGroupBefore: function (cm) {
                    return cm.deleteH(-1, "group");
                },
                delGroupAfter: function (cm) {
                    return cm.deleteH(1, "group");
                },
                indentAuto: function (cm) {
                    return cm.indentSelection("smart");
                },
                indentMore: function (cm) {
                    return cm.indentSelection("add");
                },
                indentLess: function (cm) {
                    return cm.indentSelection("subtract");
                },
                insertTab: function (cm) {
                    return cm.replaceSelection("\t");
                },
                insertSoftTab: function (cm) {
                    var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;
                    for (var i = 0; i < ranges.length; i++) {
                        var pos = ranges[i].from();
                        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);
                        spaces.push(spaceStr(tabSize - col % tabSize));
                    }
                    cm.replaceSelections(spaces);
                },
                defaultTab: function (cm) {
                    if (cm.somethingSelected()) {
                        cm.indentSelection("add");
                    } else {
                        cm.execCommand("insertTab");
                    }
                },
                transposeChars: function (cm) {
                    return runInOp(cm, function () {
                        var ranges = cm.listSelections(), newSel = [];
                        for (var i = 0; i < ranges.length; i++) {
                            if (!ranges[i].empty()) {
                                continue;
                            }
                            var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;
                            if (line) {
                                if (cur.ch == line.length) {
                                    cur = new Pos(cur.line, cur.ch - 1);
                                }
                                if (cur.ch > 0) {
                                    cur = new Pos(cur.line, cur.ch + 1);
                                    cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2), Pos(cur.line, cur.ch - 2), cur, "+transpose");
                                } else if (cur.line > cm.doc.first) {
                                    var prev = getLine(cm.doc, cur.line - 1).text;
                                    if (prev) {
                                        cur = new Pos(cur.line, 1);
                                        cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() + prev.charAt(prev.length - 1), Pos(cur.line - 1, prev.length - 1), cur, "+transpose");
                                    }
                                }
                            }
                            newSel.push(new Range(cur, cur));
                        }
                        cm.setSelections(newSel);
                    });
                },
                newlineAndIndent: function (cm) {
                    return runInOp(cm, function () {
                        var sels = cm.listSelections();
                        for (var i = sels.length - 1; i >= 0; i--) {
                            cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, "+input");
                        }
                        sels = cm.listSelections();
                        for (var i$1 = 0; i$1 < sels.length; i$1++) {
                            cm.indentLine(sels[i$1].from().line, null, true);
                        }
                        ensureCursorVisible(cm);
                    });
                },
                openLine: function (cm) {
                    return cm.replaceSelection("\n", "start");
                },
                toggleOverwrite: function (cm) {
                    return cm.toggleOverwrite();
                }
            };
            function lineStart(cm, lineN) {
                var line = getLine(cm.doc, lineN);
                var visual = visualLine(line);
                if (visual != line) {
                    lineN = lineNo(visual);
                }
                return endOfLine(true, cm, visual, lineN, 1);
            }
            function lineEnd(cm, lineN) {
                var line = getLine(cm.doc, lineN);
                var visual = visualLineEnd(line);
                if (visual != line) {
                    lineN = lineNo(visual);
                }
                return endOfLine(true, cm, line, lineN, -1);
            }
            function lineStartSmart(cm, pos) {
                var start = lineStart(cm, pos.line);
                var line = getLine(cm.doc, start.line);
                var order = getOrder(line, cm.doc.direction);
                if (!order || order[0].level == 0) {
                    var firstNonWS = Math.max(start.ch, line.text.search(/\S/));
                    var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;
                    return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky);
                }
                return start;
            }
            function doHandleBinding(cm, bound, dropShift) {
                if (typeof bound == "string") {
                    bound = commands[bound];
                    if (!bound) {
                        return false;
                    }
                }
                cm.display.input.ensurePolled();
                var prevShift = cm.display.shift, done = false;
                try {
                    if (cm.isReadOnly()) {
                        cm.state.suppressEdits = true;
                    }
                    if (dropShift) {
                        cm.display.shift = false;
                    }
                    done = bound(cm) != Pass;
                } finally {
                    cm.display.shift = prevShift;
                    cm.state.suppressEdits = false;
                }
                return done;
            }
            function lookupKeyForEditor(cm, name, handle) {
                for (var i = 0; i < cm.state.keyMaps.length; i++) {
                    var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);
                    if (result) {
                        return result;
                    }
                }
                return cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm) || lookupKey(name, cm.options.keyMap, handle, cm);
            }
            var stopSeq = new Delayed();
            function dispatchKey(cm, name, e, handle) {
                var seq = cm.state.keySeq;
                if (seq) {
                    if (isModifierKey(name)) {
                        return "handled";
                    }
                    if ((/\'$/).test(name)) {
                        cm.state.keySeq = null;
                    } else {
                        stopSeq.set(50, function () {
                            if (cm.state.keySeq == seq) {
                                cm.state.keySeq = null;
                                cm.display.input.reset();
                            }
                        });
                    }
                    if (dispatchKeyInner(cm, seq + " " + name, e, handle)) {
                        return true;
                    }
                }
                return dispatchKeyInner(cm, name, e, handle);
            }
            function dispatchKeyInner(cm, name, e, handle) {
                var result = lookupKeyForEditor(cm, name, handle);
                if (result == "multi") {
                    cm.state.keySeq = name;
                }
                if (result == "handled") {
                    signalLater(cm, "keyHandled", cm, name, e);
                }
                if (result == "handled" || result == "multi") {
                    e_preventDefault(e);
                    restartBlink(cm);
                }
                return !!result;
            }
            function handleKeyBinding(cm, e) {
                var name = keyName(e, true);
                if (!name) {
                    return false;
                }
                if (e.shiftKey && !cm.state.keySeq) {
                    return dispatchKey(cm, "Shift-" + name, e, function (b) {
                        return doHandleBinding(cm, b, true);
                    }) || dispatchKey(cm, name, e, function (b) {
                        if (typeof b == "string" ? (/^go[A-Z]/).test(b) : b.motion) {
                            return doHandleBinding(cm, b);
                        }
                    });
                } else {
                    return dispatchKey(cm, name, e, function (b) {
                        return doHandleBinding(cm, b);
                    });
                }
            }
            function handleCharBinding(cm, e, ch) {
                return dispatchKey(cm, "'" + ch + "'", e, function (b) {
                    return doHandleBinding(cm, b, true);
                });
            }
            var lastStoppedKey = null;
            function onKeyDown(e) {
                var cm = this;
                if (e.target && e.target != cm.display.input.getField()) {
                    return;
                }
                cm.curOp.focus = activeElt(root(cm));
                if (signalDOMEvent(cm, e)) {
                    return;
                }
                if (ie && ie_version < 11 && e.keyCode == 27) {
                    e.returnValue = false;
                }
                var code = e.keyCode;
                cm.display.shift = code == 16 || e.shiftKey;
                var handled = handleKeyBinding(cm, e);
                if (presto) {
                    lastStoppedKey = handled ? code : null;
                    if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey)) {
                        cm.replaceSelection("", null, "cut");
                    }
                }
                if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand) {
                    document.execCommand("cut");
                }
                if (code == 18 && !(/\bCodeMirror-crosshair\b/).test(cm.display.lineDiv.className)) {
                    showCrossHair(cm);
                }
            }
            function showCrossHair(cm) {
                var lineDiv = cm.display.lineDiv;
                addClass(lineDiv, "CodeMirror-crosshair");
                function up(e) {
                    if (e.keyCode == 18 || !e.altKey) {
                        rmClass(lineDiv, "CodeMirror-crosshair");
                        off(document, "keyup", up);
                        off(document, "mouseover", up);
                    }
                }
                on(document, "keyup", up);
                on(document, "mouseover", up);
            }
            function onKeyUp(e) {
                if (e.keyCode == 16) {
                    this.doc.sel.shift = false;
                }
                signalDOMEvent(this, e);
            }
            function onKeyPress(e) {
                var cm = this;
                if (e.target && e.target != cm.display.input.getField()) {
                    return;
                }
                if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) {
                    return;
                }
                var keyCode = e.keyCode, charCode = e.charCode;
                if (presto && keyCode == lastStoppedKey) {
                    lastStoppedKey = null;
                    e_preventDefault(e);
                    return;
                }
                if (presto && (!e.which || e.which < 10) && handleKeyBinding(cm, e)) {
                    return;
                }
                var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
                if (ch == "\x08") {
                    return;
                }
                if (handleCharBinding(cm, e, ch)) {
                    return;
                }
                cm.display.input.onKeyPress(e);
            }
            var DOUBLECLICK_DELAY = 400;
            var PastClick = function (time, pos, button) {
                this.time = time;
                this.pos = pos;
                this.button = button;
            };
            PastClick.prototype.compare = function (time, pos, button) {
                return this.time + DOUBLECLICK_DELAY > time && cmp(pos, this.pos) == 0 && button == this.button;
            };
            var lastClick, lastDoubleClick;
            function clickRepeat(pos, button) {
                var now = +new Date();
                if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {
                    lastClick = lastDoubleClick = null;
                    return "triple";
                } else if (lastClick && lastClick.compare(now, pos, button)) {
                    lastDoubleClick = new PastClick(now, pos, button);
                    lastClick = null;
                    return "double";
                } else {
                    lastClick = new PastClick(now, pos, button);
                    lastDoubleClick = null;
                    return "single";
                }
            }
            function onMouseDown(e) {
                var cm = this, display = cm.display;
                if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) {
                    return;
                }
                display.input.ensurePolled();
                display.shift = e.shiftKey;
                if (eventInWidget(display, e)) {
                    if (!webkit) {
                        display.scroller.draggable = false;
                        setTimeout(function () {
                            return display.scroller.draggable = true;
                        }, 100);
                    }
                    return;
                }
                if (clickInGutter(cm, e)) {
                    return;
                }
                var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : "single";
                win(cm).focus();
                if (button == 1 && cm.state.selectingText) {
                    cm.state.selectingText(e);
                }
                if (pos && handleMappedButton(cm, button, pos, repeat, e)) {
                    return;
                }
                if (button == 1) {
                    if (pos) {
                        leftButtonDown(cm, pos, repeat, e);
                    } else if (e_target(e) == display.scroller) {
                        e_preventDefault(e);
                    }
                } else if (button == 2) {
                    if (pos) {
                        extendSelection(cm.doc, pos);
                    }
                    setTimeout(function () {
                        return display.input.focus();
                    }, 20);
                } else if (button == 3) {
                    if (captureRightClick) {
                        cm.display.input.onContextMenu(e);
                    } else {
                        delayBlurEvent(cm);
                    }
                }
            }
            function handleMappedButton(cm, button, pos, repeat, event) {
                var name = "Click";
                if (repeat == "double") {
                    name = "Double" + name;
                } else if (repeat == "triple") {
                    name = "Triple" + name;
                }
                name = (button == 1 ? "Left" : button == 2 ? "Middle" : "Right") + name;
                return dispatchKey(cm, addModifierNames(name, event), event, function (bound) {
                    if (typeof bound == "string") {
                        bound = commands[bound];
                    }
                    if (!bound) {
                        return false;
                    }
                    var done = false;
                    try {
                        if (cm.isReadOnly()) {
                            cm.state.suppressEdits = true;
                        }
                        done = bound(cm, pos) != Pass;
                    } finally {
                        cm.state.suppressEdits = false;
                    }
                    return done;
                });
            }
            function configureMouse(cm, repeat, event) {
                var option = cm.getOption("configureMouse");
                var value = option ? option(cm, repeat, event) : {};
                if (value.unit == null) {
                    var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;
                    value.unit = rect ? "rectangle" : repeat == "single" ? "char" : repeat == "double" ? "word" : "line";
                }
                if (value.extend == null || cm.doc.extend) {
                    value.extend = cm.doc.extend || event.shiftKey;
                }
                if (value.addNew == null) {
                    value.addNew = mac ? event.metaKey : event.ctrlKey;
                }
                if (value.moveOnDrag == null) {
                    value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey);
                }
                return value;
            }
            function leftButtonDown(cm, pos, repeat, event) {
                if (ie) {
                    setTimeout(bind(ensureFocus, cm), 0);
                } else {
                    cm.curOp.focus = activeElt(root(cm));
                }
                var behavior = configureMouse(cm, repeat, event);
                var sel = cm.doc.sel, contained;
                if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() && repeat == "single" && (contained = sel.contains(pos)) > -1 && (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) && (cmp(contained.to(), pos) > 0 || pos.xRel < 0)) {
                    leftButtonStartDrag(cm, event, pos, behavior);
                } else {
                    leftButtonSelect(cm, event, pos, behavior);
                }
            }
            function leftButtonStartDrag(cm, event, pos, behavior) {
                var display = cm.display, moved = false;
                var dragEnd = operation(cm, function (e) {
                    if (webkit) {
                        display.scroller.draggable = false;
                    }
                    cm.state.draggingText = false;
                    if (cm.state.delayingBlurEvent) {
                        if (cm.hasFocus()) {
                            cm.state.delayingBlurEvent = false;
                        } else {
                            delayBlurEvent(cm);
                        }
                    }
                    off(display.wrapper.ownerDocument, "mouseup", dragEnd);
                    off(display.wrapper.ownerDocument, "mousemove", mouseMove);
                    off(display.scroller, "dragstart", dragStart);
                    off(display.scroller, "drop", dragEnd);
                    if (!moved) {
                        e_preventDefault(e);
                        if (!behavior.addNew) {
                            extendSelection(cm.doc, pos, null, null, behavior.extend);
                        }
                        if (webkit && !safari || ie && ie_version == 9) {
                            setTimeout(function () {
                                display.wrapper.ownerDocument.body.focus({
                                    preventScroll: true
                                });
                                display.input.focus();
                            }, 20);
                        } else {
                            display.input.focus();
                        }
                    }
                });
                var mouseMove = function (e2) {
                    moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;
                };
                var dragStart = function () {
                    return moved = true;
                };
                if (webkit) {
                    display.scroller.draggable = true;
                }
                cm.state.draggingText = dragEnd;
                dragEnd.copy = !behavior.moveOnDrag;
                on(display.wrapper.ownerDocument, "mouseup", dragEnd);
                on(display.wrapper.ownerDocument, "mousemove", mouseMove);
                on(display.scroller, "dragstart", dragStart);
                on(display.scroller, "drop", dragEnd);
                cm.state.delayingBlurEvent = true;
                setTimeout(function () {
                    return display.input.focus();
                }, 20);
                if (display.scroller.dragDrop) {
                    display.scroller.dragDrop();
                }
            }
            function rangeForUnit(cm, pos, unit) {
                if (unit == "char") {
                    return new Range(pos, pos);
                }
                if (unit == "word") {
                    return cm.findWordAt(pos);
                }
                if (unit == "line") {
                    return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));
                }
                var result = unit(cm, pos);
                return new Range(result.from, result.to);
            }
            function leftButtonSelect(cm, event, start, behavior) {
                if (ie) {
                    delayBlurEvent(cm);
                }
                var display = cm.display, doc = cm.doc;
                e_preventDefault(event);
                var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;
                if (behavior.addNew && !behavior.extend) {
                    ourIndex = doc.sel.contains(start);
                    if (ourIndex > -1) {
                        ourRange = ranges[ourIndex];
                    } else {
                        ourRange = new Range(start, start);
                    }
                } else {
                    ourRange = doc.sel.primary();
                    ourIndex = doc.sel.primIndex;
                }
                if (behavior.unit == "rectangle") {
                    if (!behavior.addNew) {
                        ourRange = new Range(start, start);
                    }
                    start = posFromMouse(cm, event, true, true);
                    ourIndex = -1;
                } else {
                    var range = rangeForUnit(cm, start, behavior.unit);
                    if (behavior.extend) {
                        ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend);
                    } else {
                        ourRange = range;
                    }
                }
                if (!behavior.addNew) {
                    ourIndex = 0;
                    setSelection(doc, new Selection([ourRange], 0), sel_mouse);
                    startSel = doc.sel;
                } else if (ourIndex == -1) {
                    ourIndex = ranges.length;
                    setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex), {
                        scroll: false,
                        origin: "*mouse"
                    });
                } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == "char" && !behavior.extend) {
                    setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0), {
                        scroll: false,
                        origin: "*mouse"
                    });
                    startSel = doc.sel;
                } else {
                    replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);
                }
                var lastPos = start;
                function extendTo(pos) {
                    if (cmp(lastPos, pos) == 0) {
                        return;
                    }
                    lastPos = pos;
                    if (behavior.unit == "rectangle") {
                        var ranges = [], tabSize = cm.options.tabSize;
                        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);
                        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);
                        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);
                        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line)); line <= end; line++) {
                            var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);
                            if (left == right) {
                                ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));
                            } else if (text.length > leftPos) {
                                ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));
                            }
                        }
                        if (!ranges.length) {
                            ranges.push(new Range(start, start));
                        }
                        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex), {
                            origin: "*mouse",
                            scroll: false
                        });
                        cm.scrollIntoView(pos);
                    } else {
                        var oldRange = ourRange;
                        var range = rangeForUnit(cm, pos, behavior.unit);
                        var anchor = oldRange.anchor, head;
                        if (cmp(range.anchor, anchor) > 0) {
                            head = range.head;
                            anchor = minPos(oldRange.from(), range.anchor);
                        } else {
                            head = range.anchor;
                            anchor = maxPos(oldRange.to(), range.head);
                        }
                        var ranges$1 = startSel.ranges.slice(0);
                        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));
                        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);
                    }
                }
                var editorSize = display.wrapper.getBoundingClientRect();
                var counter = 0;
                function extend(e) {
                    var curCount = ++counter;
                    var cur = posFromMouse(cm, e, true, behavior.unit == "rectangle");
                    if (!cur) {
                        return;
                    }
                    if (cmp(cur, lastPos) != 0) {
                        cm.curOp.focus = activeElt(root(cm));
                        extendTo(cur);
                        var visible = visibleLines(display, doc);
                        if (cur.line >= visible.to || cur.line < visible.from) {
                            setTimeout(operation(cm, function () {
                                if (counter == curCount) {
                                    extend(e);
                                }
                            }), 150);
                        }
                    } else {
                        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;
                        if (outside) {
                            setTimeout(operation(cm, function () {
                                if (counter != curCount) {
                                    return;
                                }
                                display.scroller.scrollTop += outside;
                                extend(e);
                            }), 50);
                        }
                    }
                }
                function done(e) {
                    cm.state.selectingText = false;
                    counter = Infinity;
                    if (e) {
                        e_preventDefault(e);
                        display.input.focus();
                    }
                    off(display.wrapper.ownerDocument, "mousemove", move);
                    off(display.wrapper.ownerDocument, "mouseup", up);
                    doc.history.lastSelOrigin = null;
                }
                var move = operation(cm, function (e) {
                    if (e.buttons === 0 || !e_button(e)) {
                        done(e);
                    } else {
                        extend(e);
                    }
                });
                var up = operation(cm, done);
                cm.state.selectingText = up;
                on(display.wrapper.ownerDocument, "mousemove", move);
                on(display.wrapper.ownerDocument, "mouseup", up);
            }
            function bidiSimplify(cm, range) {
                var anchor = range.anchor;
                var head = range.head;
                var anchorLine = getLine(cm.doc, anchor.line);
                if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) {
                    return range;
                }
                var order = getOrder(anchorLine);
                if (!order) {
                    return range;
                }
                var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];
                if (part.from != anchor.ch && part.to != anchor.ch) {
                    return range;
                }
                var boundary = index + (part.from == anchor.ch == (part.level != 1) ? 0 : 1);
                if (boundary == 0 || boundary == order.length) {
                    return range;
                }
                var leftSide;
                if (head.line != anchor.line) {
                    leftSide = (head.line - anchor.line) * (cm.doc.direction == "ltr" ? 1 : -1) > 0;
                } else {
                    var headIndex = getBidiPartAt(order, head.ch, head.sticky);
                    var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);
                    if (headIndex == boundary - 1 || headIndex == boundary) {
                        leftSide = dir < 0;
                    } else {
                        leftSide = dir > 0;
                    }
                }
                var usePart = order[boundary + (leftSide ? -1 : 0)];
                var from = leftSide == (usePart.level == 1);
                var ch = from ? usePart.from : usePart.to, sticky = from ? "after" : "before";
                return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head);
            }
            function gutterEvent(cm, e, type, prevent) {
                var mX, mY;
                if (e.touches) {
                    mX = e.touches[0].clientX;
                    mY = e.touches[0].clientY;
                } else {
                    try {
                        mX = e.clientX;
                        mY = e.clientY;
                    } catch (e$1) {
                        return false;
                    }
                }
                if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) {
                    return false;
                }
                if (prevent) {
                    e_preventDefault(e);
                }
                var display = cm.display;
                var lineBox = display.lineDiv.getBoundingClientRect();
                if (mY > lineBox.bottom || !hasHandler(cm, type)) {
                    return e_defaultPrevented(e);
                }
                mY -= lineBox.top - display.viewOffset;
                for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {
                    var g = display.gutters.childNodes[i];
                    if (g && g.getBoundingClientRect().right >= mX) {
                        var line = lineAtHeight(cm.doc, mY);
                        var gutter = cm.display.gutterSpecs[i];
                        signal(cm, type, cm, line, gutter.className, e);
                        return e_defaultPrevented(e);
                    }
                }
            }
            function clickInGutter(cm, e) {
                return gutterEvent(cm, e, "gutterClick", true);
            }
            function onContextMenu(cm, e) {
                if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) {
                    return;
                }
                if (signalDOMEvent(cm, e, "contextmenu")) {
                    return;
                }
                if (!captureRightClick) {
                    cm.display.input.onContextMenu(e);
                }
            }
            function contextMenuInGutter(cm, e) {
                if (!hasHandler(cm, "gutterContextMenu")) {
                    return false;
                }
                return gutterEvent(cm, e, "gutterContextMenu", false);
            }
            function themeChanged(cm) {
                cm.display.wrapper.className = cm.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + cm.options.theme.replace(/(^|\s)\s*/g, " cm-s-");
                clearCaches(cm);
            }
            var Init = {
                toString: function () {
                    return "CodeMirror.Init";
                }
            };
            var defaults = {};
            var optionHandlers = {};
            function defineOptions(CodeMirror) {
                var optionHandlers = CodeMirror.optionHandlers;
                function option(name, deflt, handle, notOnInit) {
                    CodeMirror.defaults[name] = deflt;
                    if (handle) {
                        optionHandlers[name] = notOnInit ? function (cm, val, old) {
                            if (old != Init) {
                                handle(cm, val, old);
                            }
                        } : handle;
                    }
                }
                CodeMirror.defineOption = option;
                CodeMirror.Init = Init;
                option("value", "", function (cm, val) {
                    return cm.setValue(val);
                }, true);
                option("mode", null, function (cm, val) {
                    cm.doc.modeOption = val;
                    loadMode(cm);
                }, true);
                option("indentUnit", 2, loadMode, true);
                option("indentWithTabs", false);
                option("smartIndent", true);
                option("tabSize", 4, function (cm) {
                    resetModeState(cm);
                    clearCaches(cm);
                    regChange(cm);
                }, true);
                option("lineSeparator", null, function (cm, val) {
                    cm.doc.lineSep = val;
                    if (!val) {
                        return;
                    }
                    var newBreaks = [], lineNo = cm.doc.first;
                    cm.doc.iter(function (line) {
                        for (var pos = 0; ; ) {
                            var found = line.text.indexOf(val, pos);
                            if (found == -1) {
                                break;
                            }
                            pos = found + val.length;
                            newBreaks.push(Pos(lineNo, found));
                        }
                        lineNo++;
                    });
                    for (var i = newBreaks.length - 1; i >= 0; i--) {
                        replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length));
                    }
                });
                option("specialChars", /[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g, function (cm, val, old) {
                    cm.state.specialChars = new RegExp(val.source + (val.test("\t") ? "" : "|\t"), "g");
                    if (old != Init) {
                        cm.refresh();
                    }
                });
                option("specialCharPlaceholder", defaultSpecialCharPlaceholder, function (cm) {
                    return cm.refresh();
                }, true);
                option("electricChars", true);
                option("inputStyle", mobile ? "contenteditable" : "textarea", function () {
                    throw new Error("inputStyle can not (yet) be changed in a running editor");
                }, true);
                option("spellcheck", false, function (cm, val) {
                    return cm.getInputField().spellcheck = val;
                }, true);
                option("autocorrect", false, function (cm, val) {
                    return cm.getInputField().autocorrect = val;
                }, true);
                option("autocapitalize", false, function (cm, val) {
                    return cm.getInputField().autocapitalize = val;
                }, true);
                option("rtlMoveVisually", !windows);
                option("wholeLineUpdateBefore", true);
                option("theme", "default", function (cm) {
                    themeChanged(cm);
                    updateGutters(cm);
                }, true);
                option("keyMap", "default", function (cm, val, old) {
                    var next = getKeyMap(val);
                    var prev = old != Init && getKeyMap(old);
                    if (prev && prev.detach) {
                        prev.detach(cm, next);
                    }
                    if (next.attach) {
                        next.attach(cm, prev || null);
                    }
                });
                option("extraKeys", null);
                option("configureMouse", null);
                option("lineWrapping", false, wrappingChanged, true);
                option("gutters", [], function (cm, val) {
                    cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);
                    updateGutters(cm);
                }, true);
                option("fixedGutter", true, function (cm, val) {
                    cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + "px" : "0";
                    cm.refresh();
                }, true);
                option("coverGutterNextToScrollbar", false, function (cm) {
                    return updateScrollbars(cm);
                }, true);
                option("scrollbarStyle", "native", function (cm) {
                    initScrollbars(cm);
                    updateScrollbars(cm);
                    cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);
                    cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);
                }, true);
                option("lineNumbers", false, function (cm, val) {
                    cm.display.gutterSpecs = getGutters(cm.options.gutters, val);
                    updateGutters(cm);
                }, true);
                option("firstLineNumber", 1, updateGutters, true);
                option("lineNumberFormatter", function (integer) {
                    return integer;
                }, updateGutters, true);
                option("showCursorWhenSelecting", false, updateSelection, true);
                option("resetSelectionOnContextMenu", true);
                option("lineWiseCopyCut", true);
                option("pasteLinesPerSelection", true);
                option("selectionsMayTouch", false);
                option("readOnly", false, function (cm, val) {
                    if (val == "nocursor") {
                        onBlur(cm);
                        cm.display.input.blur();
                    }
                    cm.display.input.readOnlyChanged(val);
                });
                option("screenReaderLabel", null, function (cm, val) {
                    val = val === '' ? null : val;
                    cm.display.input.screenReaderLabelChanged(val);
                });
                option("disableInput", false, function (cm, val) {
                    if (!val) {
                        cm.display.input.reset();
                    }
                }, true);
                option("dragDrop", true, dragDropChanged);
                option("allowDropFileTypes", null);
                option("cursorBlinkRate", 530);
                option("cursorScrollMargin", 0);
                option("cursorHeight", 1, updateSelection, true);
                option("singleCursorHeightPerLine", true, updateSelection, true);
                option("workTime", 100);
                option("workDelay", 100);
                option("flattenSpans", true, resetModeState, true);
                option("addModeClass", false, resetModeState, true);
                option("pollInterval", 100);
                option("undoDepth", 200, function (cm, val) {
                    return cm.doc.history.undoDepth = val;
                });
                option("historyEventDelay", 1250);
                option("viewportMargin", 10, function (cm) {
                    return cm.refresh();
                }, true);
                option("maxHighlightLength", 10000, resetModeState, true);
                option("moveInputWithCursor", true, function (cm, val) {
                    if (!val) {
                        cm.display.input.resetPosition();
                    }
                });
                option("tabindex", null, function (cm, val) {
                    return cm.display.input.getField().tabIndex = val || "";
                });
                option("autofocus", null);
                option("direction", "ltr", function (cm, val) {
                    return cm.doc.setDirection(val);
                }, true);
                option("phrases", null);
            }
            function dragDropChanged(cm, value, old) {
                var wasOn = old && old != Init;
                if (!value != !wasOn) {
                    var funcs = cm.display.dragFunctions;
                    var toggle = value ? on : off;
                    toggle(cm.display.scroller, "dragstart", funcs.start);
                    toggle(cm.display.scroller, "dragenter", funcs.enter);
                    toggle(cm.display.scroller, "dragover", funcs.over);
                    toggle(cm.display.scroller, "dragleave", funcs.leave);
                    toggle(cm.display.scroller, "drop", funcs.drop);
                }
            }
            function wrappingChanged(cm) {
                if (cm.options.lineWrapping) {
                    addClass(cm.display.wrapper, "CodeMirror-wrap");
                    cm.display.sizer.style.minWidth = "";
                    cm.display.sizerWidth = null;
                } else {
                    rmClass(cm.display.wrapper, "CodeMirror-wrap");
                    findMaxLine(cm);
                }
                estimateLineHeights(cm);
                regChange(cm);
                clearCaches(cm);
                setTimeout(function () {
                    return updateScrollbars(cm);
                }, 100);
            }
            function CodeMirror(place, options) {
                var this$1$1 = this;
                if (!(this instanceof CodeMirror)) {
                    return new CodeMirror(place, options);
                }
                this.options = options = options ? copyObj(options) : {};
                copyObj(defaults, options, false);
                var doc = options.value;
                if (typeof doc == "string") {
                    doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction);
                } else if (options.mode) {
                    doc.modeOption = options.mode;
                }
                this.doc = doc;
                var input = new CodeMirror.inputStyles[options.inputStyle](this);
                var display = this.display = new Display(place, doc, input, options);
                display.wrapper.CodeMirror = this;
                themeChanged(this);
                if (options.lineWrapping) {
                    this.display.wrapper.className += " CodeMirror-wrap";
                }
                initScrollbars(this);
                this.state = {
                    keyMaps: [],
                    overlays: [],
                    modeGen: 0,
                    overwrite: false,
                    delayingBlurEvent: false,
                    focused: false,
                    suppressEdits: false,
                    pasteIncoming: -1,
                    cutIncoming: -1,
                    selectingText: false,
                    draggingText: false,
                    highlight: new Delayed(),
                    keySeq: null,
                    specialChars: null
                };
                if (options.autofocus && !mobile) {
                    display.input.focus();
                }
                if (ie && ie_version < 11) {
                    setTimeout(function () {
                        return this$1$1.display.input.reset(true);
                    }, 20);
                }
                registerEventHandlers(this);
                ensureGlobalHandlers();
                startOperation(this);
                this.curOp.forceUpdate = true;
                attachDoc(this, doc);
                if (options.autofocus && !mobile || this.hasFocus()) {
                    setTimeout(function () {
                        if (this$1$1.hasFocus() && !this$1$1.state.focused) {
                            onFocus(this$1$1);
                        }
                    }, 20);
                } else {
                    onBlur(this);
                }
                for (var opt in optionHandlers) {
                    if (optionHandlers.hasOwnProperty(opt)) {
                        optionHandlers[opt](this, options[opt], Init);
                    }
                }
                maybeUpdateLineNumberWidth(this);
                if (options.finishInit) {
                    options.finishInit(this);
                }
                for (var i = 0; i < initHooks.length; ++i) {
                    initHooks[i](this);
                }
                endOperation(this);
                if (webkit && options.lineWrapping && getComputedStyle(display.lineDiv).textRendering == "optimizelegibility") {
                    display.lineDiv.style.textRendering = "auto";
                }
            }
            CodeMirror.defaults = defaults;
            CodeMirror.optionHandlers = optionHandlers;
            function registerEventHandlers(cm) {
                var d = cm.display;
                on(d.scroller, "mousedown", operation(cm, onMouseDown));
                if (ie && ie_version < 11) {
                    on(d.scroller, "dblclick", operation(cm, function (e) {
                        if (signalDOMEvent(cm, e)) {
                            return;
                        }
                        var pos = posFromMouse(cm, e);
                        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) {
                            return;
                        }
                        e_preventDefault(e);
                        var word = cm.findWordAt(pos);
                        extendSelection(cm.doc, word.anchor, word.head);
                    }));
                } else {
                    on(d.scroller, "dblclick", function (e) {
                        return signalDOMEvent(cm, e) || e_preventDefault(e);
                    });
                }
                on(d.scroller, "contextmenu", function (e) {
                    return onContextMenu(cm, e);
                });
                on(d.input.getField(), "contextmenu", function (e) {
                    if (!d.scroller.contains(e.target)) {
                        onContextMenu(cm, e);
                    }
                });
                var touchFinished, prevTouch = {
                    end: 0
                };
                function finishTouch() {
                    if (d.activeTouch) {
                        touchFinished = setTimeout(function () {
                            return d.activeTouch = null;
                        }, 1000);
                        prevTouch = d.activeTouch;
                        prevTouch.end = +new Date();
                    }
                }
                function isMouseLikeTouchEvent(e) {
                    if (e.touches.length != 1) {
                        return false;
                    }
                    var touch = e.touches[0];
                    return touch.radiusX <= 1 && touch.radiusY <= 1;
                }
                function farAway(touch, other) {
                    if (other.left == null) {
                        return true;
                    }
                    var dx = other.left - touch.left, dy = other.top - touch.top;
                    return dx * dx + dy * dy > 20 * 20;
                }
                on(d.scroller, "touchstart", function (e) {
                    if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {
                        d.input.ensurePolled();
                        clearTimeout(touchFinished);
                        var now = +new Date();
                        d.activeTouch = {
                            start: now,
                            moved: false,
                            prev: now - prevTouch.end <= 300 ? prevTouch : null
                        };
                        if (e.touches.length == 1) {
                            d.activeTouch.left = e.touches[0].pageX;
                            d.activeTouch.top = e.touches[0].pageY;
                        }
                    }
                });
                on(d.scroller, "touchmove", function () {
                    if (d.activeTouch) {
                        d.activeTouch.moved = true;
                    }
                });
                on(d.scroller, "touchend", function (e) {
                    var touch = d.activeTouch;
                    if (touch && !eventInWidget(d, e) && touch.left != null && !touch.moved && new Date() - touch.start < 300) {
                        var pos = cm.coordsChar(d.activeTouch, "page"), range;
                        if (!touch.prev || farAway(touch, touch.prev)) {
                            range = new Range(pos, pos);
                        } else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) {
                            range = cm.findWordAt(pos);
                        } else {
                            range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0)));
                        }
                        cm.setSelection(range.anchor, range.head);
                        cm.focus();
                        e_preventDefault(e);
                    }
                    finishTouch();
                });
                on(d.scroller, "touchcancel", finishTouch);
                on(d.scroller, "scroll", function () {
                    if (d.scroller.clientHeight) {
                        updateScrollTop(cm, d.scroller.scrollTop);
                        setScrollLeft(cm, d.scroller.scrollLeft, true);
                        signal(cm, "scroll", cm);
                    }
                });
                on(d.scroller, "mousewheel", function (e) {
                    return onScrollWheel(cm, e);
                });
                on(d.scroller, "DOMMouseScroll", function (e) {
                    return onScrollWheel(cm, e);
                });
                on(d.wrapper, "scroll", function () {
                    return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0;
                });
                d.dragFunctions = {
                    enter: function (e) {
                        if (!signalDOMEvent(cm, e)) {
                            e_stop(e);
                        }
                    },
                    over: function (e) {
                        if (!signalDOMEvent(cm, e)) {
                            onDragOver(cm, e);
                            e_stop(e);
                        }
                    },
                    start: function (e) {
                        return onDragStart(cm, e);
                    },
                    drop: operation(cm, onDrop),
                    leave: function (e) {
                        if (!signalDOMEvent(cm, e)) {
                            clearDragCursor(cm);
                        }
                    }
                };
                var inp = d.input.getField();
                on(inp, "keyup", function (e) {
                    return onKeyUp.call(cm, e);
                });
                on(inp, "keydown", operation(cm, onKeyDown));
                on(inp, "keypress", operation(cm, onKeyPress));
                on(inp, "focus", function (e) {
                    return onFocus(cm, e);
                });
                on(inp, "blur", function (e) {
                    return onBlur(cm, e);
                });
            }
            var initHooks = [];
            CodeMirror.defineInitHook = function (f) {
                return initHooks.push(f);
            };
            function indentLine(cm, n, how, aggressive) {
                var doc = cm.doc, state;
                if (how == null) {
                    how = "add";
                }
                if (how == "smart") {
                    if (!doc.mode.indent) {
                        how = "prev";
                    } else {
                        state = getContextBefore(cm, n).state;
                    }
                }
                var tabSize = cm.options.tabSize;
                var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);
                if (line.stateAfter) {
                    line.stateAfter = null;
                }
                var curSpaceString = line.text.match(/^\s*/)[0], indentation;
                if (!aggressive && !(/\S/).test(line.text)) {
                    indentation = 0;
                    how = "not";
                } else if (how == "smart") {
                    indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);
                    if (indentation == Pass || indentation > 150) {
                        if (!aggressive) {
                            return;
                        }
                        how = "prev";
                    }
                }
                if (how == "prev") {
                    if (n > doc.first) {
                        indentation = countColumn(getLine(doc, n - 1).text, null, tabSize);
                    } else {
                        indentation = 0;
                    }
                } else if (how == "add") {
                    indentation = curSpace + cm.options.indentUnit;
                } else if (how == "subtract") {
                    indentation = curSpace - cm.options.indentUnit;
                } else if (typeof how == "number") {
                    indentation = curSpace + how;
                }
                indentation = Math.max(0, indentation);
                var indentString = "", pos = 0;
                if (cm.options.indentWithTabs) {
                    for (var i = Math.floor(indentation / tabSize); i; --i) {
                        pos += tabSize;
                        indentString += "\t";
                    }
                }
                if (pos < indentation) {
                    indentString += spaceStr(indentation - pos);
                }
                if (indentString != curSpaceString) {
                    replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), "+input");
                    line.stateAfter = null;
                    return true;
                } else {
                    for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {
                        var range = doc.sel.ranges[i$1];
                        if (range.head.line == n && range.head.ch < curSpaceString.length) {
                            var pos$1 = Pos(n, curSpaceString.length);
                            replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));
                            break;
                        }
                    }
                }
            }
            var lastCopied = null;
            function setLastCopied(newLastCopied) {
                lastCopied = newLastCopied;
            }
            function applyTextInput(cm, inserted, deleted, sel, origin) {
                var doc = cm.doc;
                cm.display.shift = false;
                if (!sel) {
                    sel = doc.sel;
                }
                var recent = +new Date() - 200;
                var paste = origin == "paste" || cm.state.pasteIncoming > recent;
                var textLines = splitLinesAuto(inserted), multiPaste = null;
                if (paste && sel.ranges.length > 1) {
                    if (lastCopied && lastCopied.text.join("\n") == inserted) {
                        if (sel.ranges.length % lastCopied.text.length == 0) {
                            multiPaste = [];
                            for (var i = 0; i < lastCopied.text.length; i++) {
                                multiPaste.push(doc.splitLines(lastCopied.text[i]));
                            }
                        }
                    } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {
                        multiPaste = map(textLines, function (l) {
                            return [l];
                        });
                    }
                }
                var updateInput = cm.curOp.updateInput;
                for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {
                    var range = sel.ranges[i$1];
                    var from = range.from(), to = range.to();
                    if (range.empty()) {
                        if (deleted && deleted > 0) {
                            from = Pos(from.line, from.ch - deleted);
                        } else if (cm.state.overwrite && !paste) {
                            to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));
                        } else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join("\n") == textLines.join("\n")) {
                            from = to = Pos(from.line, 0);
                        }
                    }
                    var changeEvent = {
                        from: from,
                        to: to,
                        text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,
                        origin: origin || (paste ? "paste" : cm.state.cutIncoming > recent ? "cut" : "+input")
                    };
                    makeChange(cm.doc, changeEvent);
                    signalLater(cm, "inputRead", cm, changeEvent);
                }
                if (inserted && !paste) {
                    triggerElectric(cm, inserted);
                }
                ensureCursorVisible(cm);
                if (cm.curOp.updateInput < 2) {
                    cm.curOp.updateInput = updateInput;
                }
                cm.curOp.typing = true;
                cm.state.pasteIncoming = cm.state.cutIncoming = -1;
            }
            function handlePaste(e, cm) {
                var pasted = e.clipboardData && e.clipboardData.getData("Text");
                if (pasted) {
                    e.preventDefault();
                    if (!cm.isReadOnly() && !cm.options.disableInput && cm.hasFocus()) {
                        runInOp(cm, function () {
                            return applyTextInput(cm, pasted, 0, null, "paste");
                        });
                    }
                    return true;
                }
            }
            function triggerElectric(cm, inserted) {
                if (!cm.options.electricChars || !cm.options.smartIndent) {
                    return;
                }
                var sel = cm.doc.sel;
                for (var i = sel.ranges.length - 1; i >= 0; i--) {
                    var range = sel.ranges[i];
                    if (range.head.ch > 100 || i && sel.ranges[i - 1].head.line == range.head.line) {
                        continue;
                    }
                    var mode = cm.getModeAt(range.head);
                    var indented = false;
                    if (mode.electricChars) {
                        for (var j = 0; j < mode.electricChars.length; j++) {
                            if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {
                                indented = indentLine(cm, range.head.line, "smart");
                                break;
                            }
                        }
                    } else if (mode.electricInput) {
                        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch))) {
                            indented = indentLine(cm, range.head.line, "smart");
                        }
                    }
                    if (indented) {
                        signalLater(cm, "electricInput", cm, range.head.line);
                    }
                }
            }
            function copyableRanges(cm) {
                var text = [], ranges = [];
                for (var i = 0; i < cm.doc.sel.ranges.length; i++) {
                    var line = cm.doc.sel.ranges[i].head.line;
                    var lineRange = {
                        anchor: Pos(line, 0),
                        head: Pos(line + 1, 0)
                    };
                    ranges.push(lineRange);
                    text.push(cm.getRange(lineRange.anchor, lineRange.head));
                }
                return {
                    text: text,
                    ranges: ranges
                };
            }
            function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {
                field.setAttribute("autocorrect", autocorrect ? "on" : "off");
                field.setAttribute("autocapitalize", autocapitalize ? "on" : "off");
                field.setAttribute("spellcheck", !!spellcheck);
            }
            function hiddenTextarea() {
                var te = elt("textarea", null, null, "position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none");
                var div = elt("div", [te], null, "overflow: hidden; position: relative; width: 3px; height: 0px;");
                if (webkit) {
                    te.style.width = "1000px";
                } else {
                    te.setAttribute("wrap", "off");
                }
                if (ios) {
                    te.style.border = "1px solid black";
                }
                return div;
            }
            function addEditorMethods(CodeMirror) {
                var optionHandlers = CodeMirror.optionHandlers;
                var helpers = CodeMirror.helpers = {};
                CodeMirror.prototype = {
                    constructor: CodeMirror,
                    focus: function () {
                        win(this).focus();
                        this.display.input.focus();
                    },
                    setOption: function (option, value) {
                        var options = this.options, old = options[option];
                        if (options[option] == value && option != "mode") {
                            return;
                        }
                        options[option] = value;
                        if (optionHandlers.hasOwnProperty(option)) {
                            operation(this, optionHandlers[option])(this, value, old);
                        }
                        signal(this, "optionChange", this, option);
                    },
                    getOption: function (option) {
                        return this.options[option];
                    },
                    getDoc: function () {
                        return this.doc;
                    },
                    addKeyMap: function (map, bottom) {
                        this.state.keyMaps[bottom ? "push" : "unshift"](getKeyMap(map));
                    },
                    removeKeyMap: function (map) {
                        var maps = this.state.keyMaps;
                        for (var i = 0; i < maps.length; ++i) {
                            if (maps[i] == map || maps[i].name == map) {
                                maps.splice(i, 1);
                                return true;
                            }
                        }
                    },
                    addOverlay: methodOp(function (spec, options) {
                        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);
                        if (mode.startState) {
                            throw new Error("Overlays may not be stateful.");
                        }
                        insertSorted(this.state.overlays, {
                            mode: mode,
                            modeSpec: spec,
                            opaque: options && options.opaque,
                            priority: options && options.priority || 0
                        }, function (overlay) {
                            return overlay.priority;
                        });
                        this.state.modeGen++;
                        regChange(this);
                    }),
                    removeOverlay: methodOp(function (spec) {
                        var overlays = this.state.overlays;
                        for (var i = 0; i < overlays.length; ++i) {
                            var cur = overlays[i].modeSpec;
                            if (cur == spec || typeof spec == "string" && cur.name == spec) {
                                overlays.splice(i, 1);
                                this.state.modeGen++;
                                regChange(this);
                                return;
                            }
                        }
                    }),
                    indentLine: methodOp(function (n, dir, aggressive) {
                        if (typeof dir != "string" && typeof dir != "number") {
                            if (dir == null) {
                                dir = this.options.smartIndent ? "smart" : "prev";
                            } else {
                                dir = dir ? "add" : "subtract";
                            }
                        }
                        if (isLine(this.doc, n)) {
                            indentLine(this, n, dir, aggressive);
                        }
                    }),
                    indentSelection: methodOp(function (how) {
                        var ranges = this.doc.sel.ranges, end = -1;
                        for (var i = 0; i < ranges.length; i++) {
                            var range = ranges[i];
                            if (!range.empty()) {
                                var from = range.from(), to = range.to();
                                var start = Math.max(end, from.line);
                                end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;
                                for (var j = start; j < end; ++j) {
                                    indentLine(this, j, how);
                                }
                                var newRanges = this.doc.sel.ranges;
                                if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0) {
                                    replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);
                                }
                            } else if (range.head.line > end) {
                                indentLine(this, range.head.line, how, true);
                                end = range.head.line;
                                if (i == this.doc.sel.primIndex) {
                                    ensureCursorVisible(this);
                                }
                            }
                        }
                    }),
                    getTokenAt: function (pos, precise) {
                        return takeToken(this, pos, precise);
                    },
                    getLineTokens: function (line, precise) {
                        return takeToken(this, Pos(line), precise, true);
                    },
                    getTokenTypeAt: function (pos) {
                        pos = clipPos(this.doc, pos);
                        var styles = getLineStyles(this, getLine(this.doc, pos.line));
                        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;
                        var type;
                        if (ch == 0) {
                            type = styles[2];
                        } else {
                            for (; ; ) {
                                var mid = before + after >> 1;
                                if ((mid ? styles[mid * 2 - 1] : 0) >= ch) {
                                    after = mid;
                                } else if (styles[mid * 2 + 1] < ch) {
                                    before = mid + 1;
                                } else {
                                    type = styles[mid * 2 + 2];
                                    break;
                                }
                            }
                        }
                        var cut = type ? type.indexOf("overlay ") : -1;
                        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);
                    },
                    getModeAt: function (pos) {
                        var mode = this.doc.mode;
                        if (!mode.innerMode) {
                            return mode;
                        }
                        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode;
                    },
                    getHelper: function (pos, type) {
                        return this.getHelpers(pos, type)[0];
                    },
                    getHelpers: function (pos, type) {
                        var found = [];
                        if (!helpers.hasOwnProperty(type)) {
                            return found;
                        }
                        var help = helpers[type], mode = this.getModeAt(pos);
                        if (typeof mode[type] == "string") {
                            if (help[mode[type]]) {
                                found.push(help[mode[type]]);
                            }
                        } else if (mode[type]) {
                            for (var i = 0; i < mode[type].length; i++) {
                                var val = help[mode[type][i]];
                                if (val) {
                                    found.push(val);
                                }
                            }
                        } else if (mode.helperType && help[mode.helperType]) {
                            found.push(help[mode.helperType]);
                        } else if (help[mode.name]) {
                            found.push(help[mode.name]);
                        }
                        for (var i$1 = 0; i$1 < help._global.length; i$1++) {
                            var cur = help._global[i$1];
                            if (cur.pred(mode, this) && indexOf(found, cur.val) == -1) {
                                found.push(cur.val);
                            }
                        }
                        return found;
                    },
                    getStateAfter: function (line, precise) {
                        var doc = this.doc;
                        line = clipLine(doc, line == null ? doc.first + doc.size - 1 : line);
                        return getContextBefore(this, line + 1, precise).state;
                    },
                    cursorCoords: function (start, mode) {
                        var pos, range = this.doc.sel.primary();
                        if (start == null) {
                            pos = range.head;
                        } else if (typeof start == "object") {
                            pos = clipPos(this.doc, start);
                        } else {
                            pos = start ? range.from() : range.to();
                        }
                        return cursorCoords(this, pos, mode || "page");
                    },
                    charCoords: function (pos, mode) {
                        return charCoords(this, clipPos(this.doc, pos), mode || "page");
                    },
                    coordsChar: function (coords, mode) {
                        coords = fromCoordSystem(this, coords, mode || "page");
                        return coordsChar(this, coords.left, coords.top);
                    },
                    lineAtHeight: function (height, mode) {
                        height = fromCoordSystem(this, {
                            top: height,
                            left: 0
                        }, mode || "page").top;
                        return lineAtHeight(this.doc, height + this.display.viewOffset);
                    },
                    heightAtLine: function (line, mode, includeWidgets) {
                        var end = false, lineObj;
                        if (typeof line == "number") {
                            var last = this.doc.first + this.doc.size - 1;
                            if (line < this.doc.first) {
                                line = this.doc.first;
                            } else if (line > last) {
                                line = last;
                                end = true;
                            }
                            lineObj = getLine(this.doc, line);
                        } else {
                            lineObj = line;
                        }
                        return intoCoordSystem(this, lineObj, {
                            top: 0,
                            left: 0
                        }, mode || "page", includeWidgets || end).top + (end ? this.doc.height - heightAtLine(lineObj) : 0);
                    },
                    defaultTextHeight: function () {
                        return textHeight(this.display);
                    },
                    defaultCharWidth: function () {
                        return charWidth(this.display);
                    },
                    getViewport: function () {
                        return {
                            from: this.display.viewFrom,
                            to: this.display.viewTo
                        };
                    },
                    addWidget: function (pos, node, scroll, vert, horiz) {
                        var display = this.display;
                        pos = cursorCoords(this, clipPos(this.doc, pos));
                        var top = pos.bottom, left = pos.left;
                        node.style.position = "absolute";
                        node.setAttribute("cm-ignore-events", "true");
                        this.display.input.setUneditable(node);
                        display.sizer.appendChild(node);
                        if (vert == "over") {
                            top = pos.top;
                        } else if (vert == "above" || vert == "near") {
                            var vspace = Math.max(display.wrapper.clientHeight, this.doc.height), hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);
                            if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight) {
                                top = pos.top - node.offsetHeight;
                            } else if (pos.bottom + node.offsetHeight <= vspace) {
                                top = pos.bottom;
                            }
                            if (left + node.offsetWidth > hspace) {
                                left = hspace - node.offsetWidth;
                            }
                        }
                        node.style.top = top + "px";
                        node.style.left = node.style.right = "";
                        if (horiz == "right") {
                            left = display.sizer.clientWidth - node.offsetWidth;
                            node.style.right = "0px";
                        } else {
                            if (horiz == "left") {
                                left = 0;
                            } else if (horiz == "middle") {
                                left = (display.sizer.clientWidth - node.offsetWidth) / 2;
                            }
                            node.style.left = left + "px";
                        }
                        if (scroll) {
                            scrollIntoView(this, {
                                left: left,
                                top: top,
                                right: left + node.offsetWidth,
                                bottom: top + node.offsetHeight
                            });
                        }
                    },
                    triggerOnKeyDown: methodOp(onKeyDown),
                    triggerOnKeyPress: methodOp(onKeyPress),
                    triggerOnKeyUp: onKeyUp,
                    triggerOnMouseDown: methodOp(onMouseDown),
                    execCommand: function (cmd) {
                        if (commands.hasOwnProperty(cmd)) {
                            return commands[cmd].call(null, this);
                        }
                    },
                    triggerElectric: methodOp(function (text) {
                        triggerElectric(this, text);
                    }),
                    findPosH: function (from, amount, unit, visually) {
                        var dir = 1;
                        if (amount < 0) {
                            dir = -1;
                            amount = -amount;
                        }
                        var cur = clipPos(this.doc, from);
                        for (var i = 0; i < amount; ++i) {
                            cur = findPosH(this.doc, cur, dir, unit, visually);
                            if (cur.hitSide) {
                                break;
                            }
                        }
                        return cur;
                    },
                    moveH: methodOp(function (dir, unit) {
                        var this$1$1 = this;
                        this.extendSelectionsBy(function (range) {
                            if (this$1$1.display.shift || this$1$1.doc.extend || range.empty()) {
                                return findPosH(this$1$1.doc, range.head, dir, unit, this$1$1.options.rtlMoveVisually);
                            } else {
                                return dir < 0 ? range.from() : range.to();
                            }
                        }, sel_move);
                    }),
                    deleteH: methodOp(function (dir, unit) {
                        var sel = this.doc.sel, doc = this.doc;
                        if (sel.somethingSelected()) {
                            doc.replaceSelection("", null, "+delete");
                        } else {
                            deleteNearSelection(this, function (range) {
                                var other = findPosH(doc, range.head, dir, unit, false);
                                return dir < 0 ? {
                                    from: other,
                                    to: range.head
                                } : {
                                    from: range.head,
                                    to: other
                                };
                            });
                        }
                    }),
                    findPosV: function (from, amount, unit, goalColumn) {
                        var dir = 1, x = goalColumn;
                        if (amount < 0) {
                            dir = -1;
                            amount = -amount;
                        }
                        var cur = clipPos(this.doc, from);
                        for (var i = 0; i < amount; ++i) {
                            var coords = cursorCoords(this, cur, "div");
                            if (x == null) {
                                x = coords.left;
                            } else {
                                coords.left = x;
                            }
                            cur = findPosV(this, coords, dir, unit);
                            if (cur.hitSide) {
                                break;
                            }
                        }
                        return cur;
                    },
                    moveV: methodOp(function (dir, unit) {
                        var this$1$1 = this;
                        var doc = this.doc, goals = [];
                        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();
                        doc.extendSelectionsBy(function (range) {
                            if (collapse) {
                                return dir < 0 ? range.from() : range.to();
                            }
                            var headPos = cursorCoords(this$1$1, range.head, "div");
                            if (range.goalColumn != null) {
                                headPos.left = range.goalColumn;
                            }
                            goals.push(headPos.left);
                            var pos = findPosV(this$1$1, headPos, dir, unit);
                            if (unit == "page" && range == doc.sel.primary()) {
                                addToScrollTop(this$1$1, charCoords(this$1$1, pos, "div").top - headPos.top);
                            }
                            return pos;
                        }, sel_move);
                        if (goals.length) {
                            for (var i = 0; i < doc.sel.ranges.length; i++) {
                                doc.sel.ranges[i].goalColumn = goals[i];
                            }
                        }
                    }),
                    findWordAt: function (pos) {
                        var doc = this.doc, line = getLine(doc, pos.line).text;
                        var start = pos.ch, end = pos.ch;
                        if (line) {
                            var helper = this.getHelper(pos, "wordChars");
                            if ((pos.sticky == "before" || end == line.length) && start) {
                                --start;
                            } else {
                                ++end;
                            }
                            var startChar = line.charAt(start);
                            var check = isWordChar(startChar, helper) ? function (ch) {
                                return isWordChar(ch, helper);
                            } : (/\s/).test(startChar) ? function (ch) {
                                return (/\s/).test(ch);
                            } : function (ch) {
                                return !(/\s/).test(ch) && !isWordChar(ch);
                            };
                            while (start > 0 && check(line.charAt(start - 1))) {
                                --start;
                            }
                            while (end < line.length && check(line.charAt(end))) {
                                ++end;
                            }
                        }
                        return new Range(Pos(pos.line, start), Pos(pos.line, end));
                    },
                    toggleOverwrite: function (value) {
                        if (value != null && value == this.state.overwrite) {
                            return;
                        }
                        if (this.state.overwrite = !this.state.overwrite) {
                            addClass(this.display.cursorDiv, "CodeMirror-overwrite");
                        } else {
                            rmClass(this.display.cursorDiv, "CodeMirror-overwrite");
                        }
                        signal(this, "overwriteToggle", this, this.state.overwrite);
                    },
                    hasFocus: function () {
                        return this.display.input.getField() == activeElt(root(this));
                    },
                    isReadOnly: function () {
                        return !!(this.options.readOnly || this.doc.cantEdit);
                    },
                    scrollTo: methodOp(function (x, y) {
                        scrollToCoords(this, x, y);
                    }),
                    getScrollInfo: function () {
                        var scroller = this.display.scroller;
                        return {
                            left: scroller.scrollLeft,
                            top: scroller.scrollTop,
                            height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,
                            width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,
                            clientHeight: displayHeight(this),
                            clientWidth: displayWidth(this)
                        };
                    },
                    scrollIntoView: methodOp(function (range, margin) {
                        if (range == null) {
                            range = {
                                from: this.doc.sel.primary().head,
                                to: null
                            };
                            if (margin == null) {
                                margin = this.options.cursorScrollMargin;
                            }
                        } else if (typeof range == "number") {
                            range = {
                                from: Pos(range, 0),
                                to: null
                            };
                        } else if (range.from == null) {
                            range = {
                                from: range,
                                to: null
                            };
                        }
                        if (!range.to) {
                            range.to = range.from;
                        }
                        range.margin = margin || 0;
                        if (range.from.line != null) {
                            scrollToRange(this, range);
                        } else {
                            scrollToCoordsRange(this, range.from, range.to, range.margin);
                        }
                    }),
                    setSize: methodOp(function (width, height) {
                        var this$1$1 = this;
                        var interpret = function (val) {
                            return typeof val == "number" || (/^\d+$/).test(String(val)) ? val + "px" : val;
                        };
                        if (width != null) {
                            this.display.wrapper.style.width = interpret(width);
                        }
                        if (height != null) {
                            this.display.wrapper.style.height = interpret(height);
                        }
                        if (this.options.lineWrapping) {
                            clearLineMeasurementCache(this);
                        }
                        var lineNo = this.display.viewFrom;
                        this.doc.iter(lineNo, this.display.viewTo, function (line) {
                            if (line.widgets) {
                                for (var i = 0; i < line.widgets.length; i++) {
                                    if (line.widgets[i].noHScroll) {
                                        regLineChange(this$1$1, lineNo, "widget");
                                        break;
                                    }
                                }
                            }
                            ++lineNo;
                        });
                        this.curOp.forceUpdate = true;
                        signal(this, "refresh", this);
                    }),
                    operation: function (f) {
                        return runInOp(this, f);
                    },
                    startOperation: function () {
                        return startOperation(this);
                    },
                    endOperation: function () {
                        return endOperation(this);
                    },
                    refresh: methodOp(function () {
                        var oldHeight = this.display.cachedTextHeight;
                        regChange(this);
                        this.curOp.forceUpdate = true;
                        clearCaches(this);
                        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);
                        updateGutterSpace(this.display);
                        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping) {
                            estimateLineHeights(this);
                        }
                        signal(this, "refresh", this);
                    }),
                    swapDoc: methodOp(function (doc) {
                        var old = this.doc;
                        old.cm = null;
                        if (this.state.selectingText) {
                            this.state.selectingText();
                        }
                        attachDoc(this, doc);
                        clearCaches(this);
                        this.display.input.reset();
                        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);
                        this.curOp.forceScroll = true;
                        signalLater(this, "swapDoc", this, old);
                        return old;
                    }),
                    phrase: function (phraseText) {
                        var phrases = this.options.phrases;
                        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText;
                    },
                    getInputField: function () {
                        return this.display.input.getField();
                    },
                    getWrapperElement: function () {
                        return this.display.wrapper;
                    },
                    getScrollerElement: function () {
                        return this.display.scroller;
                    },
                    getGutterElement: function () {
                        return this.display.gutters;
                    }
                };
                eventMixin(CodeMirror);
                CodeMirror.registerHelper = function (type, name, value) {
                    if (!helpers.hasOwnProperty(type)) {
                        helpers[type] = CodeMirror[type] = {
                            _global: []
                        };
                    }
                    helpers[type][name] = value;
                };
                CodeMirror.registerGlobalHelper = function (type, name, predicate, value) {
                    CodeMirror.registerHelper(type, name, value);
                    helpers[type]._global.push({
                        pred: predicate,
                        val: value
                    });
                };
            }
            function findPosH(doc, pos, dir, unit, visually) {
                var oldPos = pos;
                var origDir = dir;
                var lineObj = getLine(doc, pos.line);
                var lineDir = visually && doc.direction == "rtl" ? -dir : dir;
                function findNextLine() {
                    var l = pos.line + lineDir;
                    if (l < doc.first || l >= doc.first + doc.size) {
                        return false;
                    }
                    pos = new Pos(l, pos.ch, pos.sticky);
                    return lineObj = getLine(doc, l);
                }
                function moveOnce(boundToLine) {
                    var next;
                    if (unit == "codepoint") {
                        var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));
                        if (isNaN(ch)) {
                            next = null;
                        } else {
                            var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;
                            next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);
                        }
                    } else if (visually) {
                        next = moveVisually(doc.cm, lineObj, pos, dir);
                    } else {
                        next = moveLogically(lineObj, pos, dir);
                    }
                    if (next == null) {
                        if (!boundToLine && findNextLine()) {
                            pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir);
                        } else {
                            return false;
                        }
                    } else {
                        pos = next;
                    }
                    return true;
                }
                if (unit == "char" || unit == "codepoint") {
                    moveOnce();
                } else if (unit == "column") {
                    moveOnce(true);
                } else if (unit == "word" || unit == "group") {
                    var sawType = null, group = unit == "group";
                    var helper = doc.cm && doc.cm.getHelper(pos, "wordChars");
                    for (var first = true; ; first = false) {
                        if (dir < 0 && !moveOnce(!first)) {
                            break;
                        }
                        var cur = lineObj.text.charAt(pos.ch) || "\n";
                        var type = isWordChar(cur, helper) ? "w" : group && cur == "\n" ? "n" : !group || (/\s/).test(cur) ? null : "p";
                        if (group && !first && !type) {
                            type = "s";
                        }
                        if (sawType && sawType != type) {
                            if (dir < 0) {
                                dir = 1;
                                moveOnce();
                                pos.sticky = "after";
                            }
                            break;
                        }
                        if (type) {
                            sawType = type;
                        }
                        if (dir > 0 && !moveOnce(!first)) {
                            break;
                        }
                    }
                }
                var result = skipAtomic(doc, pos, oldPos, origDir, true);
                if (equalCursorPos(oldPos, result)) {
                    result.hitSide = true;
                }
                return result;
            }
            function findPosV(cm, pos, dir, unit) {
                var doc = cm.doc, x = pos.left, y;
                if (unit == "page") {
                    var pageSize = Math.min(cm.display.wrapper.clientHeight, win(cm).innerHeight || doc(cm).documentElement.clientHeight);
                    var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);
                    y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;
                } else if (unit == "line") {
                    y = dir > 0 ? pos.bottom + 3 : pos.top - 3;
                }
                var target;
                for (; ; ) {
                    target = coordsChar(cm, x, y);
                    if (!target.outside) {
                        break;
                    }
                    if (dir < 0 ? y <= 0 : y >= doc.height) {
                        target.hitSide = true;
                        break;
                    }
                    y += dir * 5;
                }
                return target;
            }
            var ContentEditableInput = function (cm) {
                this.cm = cm;
                this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;
                this.polling = new Delayed();
                this.composing = null;
                this.gracePeriod = false;
                this.readDOMTimeout = null;
            };
            ContentEditableInput.prototype.init = function (display) {
                var this$1$1 = this;
                var input = this, cm = input.cm;
                var div = input.div = display.lineDiv;
                div.contentEditable = true;
                disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);
                function belongsToInput(e) {
                    for (var t = e.target; t; t = t.parentNode) {
                        if (t == div) {
                            return true;
                        }
                        if ((/\bCodeMirror-(?:line)?widget\b/).test(t.className)) {
                            break;
                        }
                    }
                    return false;
                }
                on(div, "paste", function (e) {
                    if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) {
                        return;
                    }
                    if (ie_version <= 11) {
                        setTimeout(operation(cm, function () {
                            return this$1$1.updateFromDOM();
                        }), 20);
                    }
                });
                on(div, "compositionstart", function (e) {
                    this$1$1.composing = {
                        data: e.data,
                        done: false
                    };
                });
                on(div, "compositionupdate", function (e) {
                    if (!this$1$1.composing) {
                        this$1$1.composing = {
                            data: e.data,
                            done: false
                        };
                    }
                });
                on(div, "compositionend", function (e) {
                    if (this$1$1.composing) {
                        if (e.data != this$1$1.composing.data) {
                            this$1$1.readFromDOMSoon();
                        }
                        this$1$1.composing.done = true;
                    }
                });
                on(div, "touchstart", function () {
                    return input.forceCompositionEnd();
                });
                on(div, "input", function () {
                    if (!this$1$1.composing) {
                        this$1$1.readFromDOMSoon();
                    }
                });
                function onCopyCut(e) {
                    if (!belongsToInput(e) || signalDOMEvent(cm, e)) {
                        return;
                    }
                    if (cm.somethingSelected()) {
                        setLastCopied({
                            lineWise: false,
                            text: cm.getSelections()
                        });
                        if (e.type == "cut") {
                            cm.replaceSelection("", null, "cut");
                        }
                    } else if (!cm.options.lineWiseCopyCut) {
                        return;
                    } else {
                        var ranges = copyableRanges(cm);
                        setLastCopied({
                            lineWise: true,
                            text: ranges.text
                        });
                        if (e.type == "cut") {
                            cm.operation(function () {
                                cm.setSelections(ranges.ranges, 0, sel_dontScroll);
                                cm.replaceSelection("", null, "cut");
                            });
                        }
                    }
                    if (e.clipboardData) {
                        e.clipboardData.clearData();
                        var content = lastCopied.text.join("\n");
                        e.clipboardData.setData("Text", content);
                        if (e.clipboardData.getData("Text") == content) {
                            e.preventDefault();
                            return;
                        }
                    }
                    var kludge = hiddenTextarea(), te = kludge.firstChild;
                    disableBrowserMagic(te);
                    cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);
                    te.value = lastCopied.text.join("\n");
                    var hadFocus = activeElt(rootNode(div));
                    selectInput(te);
                    setTimeout(function () {
                        cm.display.lineSpace.removeChild(kludge);
                        hadFocus.focus();
                        if (hadFocus == div) {
                            input.showPrimarySelection();
                        }
                    }, 50);
                }
                on(div, "copy", onCopyCut);
                on(div, "cut", onCopyCut);
            };
            ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {
                if (label) {
                    this.div.setAttribute('aria-label', label);
                } else {
                    this.div.removeAttribute('aria-label');
                }
            };
            ContentEditableInput.prototype.prepareSelection = function () {
                var result = prepareSelection(this.cm, false);
                result.focus = activeElt(rootNode(this.div)) == this.div;
                return result;
            };
            ContentEditableInput.prototype.showSelection = function (info, takeFocus) {
                if (!info || !this.cm.display.view.length) {
                    return;
                }
                if (info.focus || takeFocus) {
                    this.showPrimarySelection();
                }
                this.showMultipleSelections(info);
            };
            ContentEditableInput.prototype.getSelection = function () {
                return this.cm.display.wrapper.ownerDocument.getSelection();
            };
            ContentEditableInput.prototype.showPrimarySelection = function () {
                var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();
                var from = prim.from(), to = prim.to();
                if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {
                    sel.removeAllRanges();
                    return;
                }
                var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
                var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);
                if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad && cmp(minPos(curAnchor, curFocus), from) == 0 && cmp(maxPos(curAnchor, curFocus), to) == 0) {
                    return;
                }
                var view = cm.display.view;
                var start = from.line >= cm.display.viewFrom && posToDOM(cm, from) || ({
                    node: view[0].measure.map[2],
                    offset: 0
                });
                var end = to.line < cm.display.viewTo && posToDOM(cm, to);
                if (!end) {
                    var measure = view[view.length - 1].measure;
                    var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;
                    end = {
                        node: map[map.length - 1],
                        offset: map[map.length - 2] - map[map.length - 3]
                    };
                }
                if (!start || !end) {
                    sel.removeAllRanges();
                    return;
                }
                var old = sel.rangeCount && sel.getRangeAt(0), rng;
                try {
                    rng = range(start.node, start.offset, end.offset, end.node);
                } catch (e) {}
                if (rng) {
                    if (!gecko && cm.state.focused) {
                        sel.collapse(start.node, start.offset);
                        if (!rng.collapsed) {
                            sel.removeAllRanges();
                            sel.addRange(rng);
                        }
                    } else {
                        sel.removeAllRanges();
                        sel.addRange(rng);
                    }
                    if (old && sel.anchorNode == null) {
                        sel.addRange(old);
                    } else if (gecko) {
                        this.startGracePeriod();
                    }
                }
                this.rememberSelection();
            };
            ContentEditableInput.prototype.startGracePeriod = function () {
                var this$1$1 = this;
                clearTimeout(this.gracePeriod);
                this.gracePeriod = setTimeout(function () {
                    this$1$1.gracePeriod = false;
                    if (this$1$1.selectionChanged()) {
                        this$1$1.cm.operation(function () {
                            return this$1$1.cm.curOp.selectionChanged = true;
                        });
                    }
                }, 20);
            };
            ContentEditableInput.prototype.showMultipleSelections = function (info) {
                removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);
                removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);
            };
            ContentEditableInput.prototype.rememberSelection = function () {
                var sel = this.getSelection();
                this.lastAnchorNode = sel.anchorNode;
                this.lastAnchorOffset = sel.anchorOffset;
                this.lastFocusNode = sel.focusNode;
                this.lastFocusOffset = sel.focusOffset;
            };
            ContentEditableInput.prototype.selectionInEditor = function () {
                var sel = this.getSelection();
                if (!sel.rangeCount) {
                    return false;
                }
                var node = sel.getRangeAt(0).commonAncestorContainer;
                return contains(this.div, node);
            };
            ContentEditableInput.prototype.focus = function () {
                if (this.cm.options.readOnly != "nocursor") {
                    if (!this.selectionInEditor() || activeElt(rootNode(this.div)) != this.div) {
                        this.showSelection(this.prepareSelection(), true);
                    }
                    this.div.focus();
                }
            };
            ContentEditableInput.prototype.blur = function () {
                this.div.blur();
            };
            ContentEditableInput.prototype.getField = function () {
                return this.div;
            };
            ContentEditableInput.prototype.supportsTouch = function () {
                return true;
            };
            ContentEditableInput.prototype.receivedFocus = function () {
                var this$1$1 = this;
                var input = this;
                if (this.selectionInEditor()) {
                    setTimeout(function () {
                        return this$1$1.pollSelection();
                    }, 20);
                } else {
                    runInOp(this.cm, function () {
                        return input.cm.curOp.selectionChanged = true;
                    });
                }
                function poll() {
                    if (input.cm.state.focused) {
                        input.pollSelection();
                        input.polling.set(input.cm.options.pollInterval, poll);
                    }
                }
                this.polling.set(this.cm.options.pollInterval, poll);
            };
            ContentEditableInput.prototype.selectionChanged = function () {
                var sel = this.getSelection();
                return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset || sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset;
            };
            ContentEditableInput.prototype.pollSelection = function () {
                if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) {
                    return;
                }
                var sel = this.getSelection(), cm = this.cm;
                if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {
                    this.cm.triggerOnKeyDown({
                        type: "keydown",
                        keyCode: 8,
                        preventDefault: Math.abs
                    });
                    this.blur();
                    this.focus();
                    return;
                }
                if (this.composing) {
                    return;
                }
                this.rememberSelection();
                var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);
                var head = domToPos(cm, sel.focusNode, sel.focusOffset);
                if (anchor && head) {
                    runInOp(cm, function () {
                        setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);
                        if (anchor.bad || head.bad) {
                            cm.curOp.selectionChanged = true;
                        }
                    });
                }
            };
            ContentEditableInput.prototype.pollContent = function () {
                if (this.readDOMTimeout != null) {
                    clearTimeout(this.readDOMTimeout);
                    this.readDOMTimeout = null;
                }
                var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();
                var from = sel.from(), to = sel.to();
                if (from.ch == 0 && from.line > cm.firstLine()) {
                    from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length);
                }
                if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine()) {
                    to = Pos(to.line + 1, 0);
                }
                if (from.line < display.viewFrom || to.line > display.viewTo - 1) {
                    return false;
                }
                var fromIndex, fromLine, fromNode;
                if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {
                    fromLine = lineNo(display.view[0].line);
                    fromNode = display.view[0].node;
                } else {
                    fromLine = lineNo(display.view[fromIndex].line);
                    fromNode = display.view[fromIndex - 1].node.nextSibling;
                }
                var toIndex = findViewIndex(cm, to.line);
                var toLine, toNode;
                if (toIndex == display.view.length - 1) {
                    toLine = display.viewTo - 1;
                    toNode = display.lineDiv.lastChild;
                } else {
                    toLine = lineNo(display.view[toIndex + 1].line) - 1;
                    toNode = display.view[toIndex + 1].node.previousSibling;
                }
                if (!fromNode) {
                    return false;
                }
                var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));
                var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));
                while (newText.length > 1 && oldText.length > 1) {
                    if (lst(newText) == lst(oldText)) {
                        newText.pop();
                        oldText.pop();
                        toLine--;
                    } else if (newText[0] == oldText[0]) {
                        newText.shift();
                        oldText.shift();
                        fromLine++;
                    } else {
                        break;
                    }
                }
                var cutFront = 0, cutEnd = 0;
                var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);
                while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront)) {
                    ++cutFront;
                }
                var newBot = lst(newText), oldBot = lst(oldText);
                var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0), oldBot.length - (oldText.length == 1 ? cutFront : 0));
                while (cutEnd < maxCutEnd && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
                    ++cutEnd;
                }
                if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {
                    while (cutFront && cutFront > from.ch && newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {
                        cutFront--;
                        cutEnd++;
                    }
                }
                newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\u200b+/, "");
                newText[0] = newText[0].slice(cutFront).replace(/\u200b+$/, "");
                var chFrom = Pos(fromLine, cutFront);
                var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);
                if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {
                    replaceRange(cm.doc, newText, chFrom, chTo, "+input");
                    return true;
                }
            };
            ContentEditableInput.prototype.ensurePolled = function () {
                this.forceCompositionEnd();
            };
            ContentEditableInput.prototype.reset = function () {
                this.forceCompositionEnd();
            };
            ContentEditableInput.prototype.forceCompositionEnd = function () {
                if (!this.composing) {
                    return;
                }
                clearTimeout(this.readDOMTimeout);
                this.composing = null;
                this.updateFromDOM();
                this.div.blur();
                this.div.focus();
            };
            ContentEditableInput.prototype.readFromDOMSoon = function () {
                var this$1$1 = this;
                if (this.readDOMTimeout != null) {
                    return;
                }
                this.readDOMTimeout = setTimeout(function () {
                    this$1$1.readDOMTimeout = null;
                    if (this$1$1.composing) {
                        if (this$1$1.composing.done) {
                            this$1$1.composing = null;
                        } else {
                            return;
                        }
                    }
                    this$1$1.updateFromDOM();
                }, 80);
            };
            ContentEditableInput.prototype.updateFromDOM = function () {
                var this$1$1 = this;
                if (this.cm.isReadOnly() || !this.pollContent()) {
                    runInOp(this.cm, function () {
                        return regChange(this$1$1.cm);
                    });
                }
            };
            ContentEditableInput.prototype.setUneditable = function (node) {
                node.contentEditable = "false";
            };
            ContentEditableInput.prototype.onKeyPress = function (e) {
                if (e.charCode == 0 || this.composing) {
                    return;
                }
                e.preventDefault();
                if (!this.cm.isReadOnly()) {
                    operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0);
                }
            };
            ContentEditableInput.prototype.readOnlyChanged = function (val) {
                this.div.contentEditable = String(val != "nocursor");
            };
            ContentEditableInput.prototype.onContextMenu = function () {};
            ContentEditableInput.prototype.resetPosition = function () {};
            ContentEditableInput.prototype.needsContentAttribute = true;
            function posToDOM(cm, pos) {
                var view = findViewForLine(cm, pos.line);
                if (!view || view.hidden) {
                    return null;
                }
                var line = getLine(cm.doc, pos.line);
                var info = mapFromLineView(view, line, pos.line);
                var order = getOrder(line, cm.doc.direction), side = "left";
                if (order) {
                    var partPos = getBidiPartAt(order, pos.ch);
                    side = partPos % 2 ? "right" : "left";
                }
                var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);
                result.offset = result.collapse == "right" ? result.end : result.start;
                return result;
            }
            function isInGutter(node) {
                for (var scan = node; scan; scan = scan.parentNode) {
                    if ((/CodeMirror-gutter-wrapper/).test(scan.className)) {
                        return true;
                    }
                }
                return false;
            }
            function badPos(pos, bad) {
                if (bad) {
                    pos.bad = true;
                }
                return pos;
            }
            function domTextBetween(cm, from, to, fromLine, toLine) {
                var text = "", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;
                function recognizeMarker(id) {
                    return function (marker) {
                        return marker.id == id;
                    };
                }
                function close() {
                    if (closing) {
                        text += lineSep;
                        if (extraLinebreak) {
                            text += lineSep;
                        }
                        closing = extraLinebreak = false;
                    }
                }
                function addText(str) {
                    if (str) {
                        close();
                        text += str;
                    }
                }
                function walk(node) {
                    if (node.nodeType == 1) {
                        var cmText = node.getAttribute("cm-text");
                        if (cmText) {
                            addText(cmText);
                            return;
                        }
                        var markerID = node.getAttribute("cm-marker"), range;
                        if (markerID) {
                            var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));
                            if (found.length && (range = found[0].find(0))) {
                                addText(getBetween(cm.doc, range.from, range.to).join(lineSep));
                            }
                            return;
                        }
                        if (node.getAttribute("contenteditable") == "false") {
                            return;
                        }
                        var isBlock = (/^(pre|div|p|li|table|br)$/i).test(node.nodeName);
                        if (!(/^br$/i).test(node.nodeName) && node.textContent.length == 0) {
                            return;
                        }
                        if (isBlock) {
                            close();
                        }
                        for (var i = 0; i < node.childNodes.length; i++) {
                            walk(node.childNodes[i]);
                        }
                        if ((/^(pre|p)$/i).test(node.nodeName)) {
                            extraLinebreak = true;
                        }
                        if (isBlock) {
                            closing = true;
                        }
                    } else if (node.nodeType == 3) {
                        addText(node.nodeValue.replace(/\u200b/g, "").replace(/\u00a0/g, " "));
                    }
                }
                for (; ; ) {
                    walk(from);
                    if (from == to) {
                        break;
                    }
                    from = from.nextSibling;
                    extraLinebreak = false;
                }
                return text;
            }
            function domToPos(cm, node, offset) {
                var lineNode;
                if (node == cm.display.lineDiv) {
                    lineNode = cm.display.lineDiv.childNodes[offset];
                    if (!lineNode) {
                        return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true);
                    }
                    node = null;
                    offset = 0;
                } else {
                    for (lineNode = node; ; lineNode = lineNode.parentNode) {
                        if (!lineNode || lineNode == cm.display.lineDiv) {
                            return null;
                        }
                        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) {
                            break;
                        }
                    }
                }
                for (var i = 0; i < cm.display.view.length; i++) {
                    var lineView = cm.display.view[i];
                    if (lineView.node == lineNode) {
                        return locateNodeInLineView(lineView, node, offset);
                    }
                }
            }
            function locateNodeInLineView(lineView, node, offset) {
                var wrapper = lineView.text.firstChild, bad = false;
                if (!node || !contains(wrapper, node)) {
                    return badPos(Pos(lineNo(lineView.line), 0), true);
                }
                if (node == wrapper) {
                    bad = true;
                    node = wrapper.childNodes[offset];
                    offset = 0;
                    if (!node) {
                        var line = lineView.rest ? lst(lineView.rest) : lineView.line;
                        return badPos(Pos(lineNo(line), line.text.length), bad);
                    }
                }
                var textNode = node.nodeType == 3 ? node : null, topNode = node;
                if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {
                    textNode = node.firstChild;
                    if (offset) {
                        offset = textNode.nodeValue.length;
                    }
                }
                while (topNode.parentNode != wrapper) {
                    topNode = topNode.parentNode;
                }
                var measure = lineView.measure, maps = measure.maps;
                function find(textNode, topNode, offset) {
                    for (var i = -1; i < (maps ? maps.length : 0); i++) {
                        var map = i < 0 ? measure.map : maps[i];
                        for (var j = 0; j < map.length; j += 3) {
                            var curNode = map[j + 2];
                            if (curNode == textNode || curNode == topNode) {
                                var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);
                                var ch = map[j] + offset;
                                if (offset < 0 || curNode != textNode) {
                                    ch = map[j + (offset ? 1 : 0)];
                                }
                                return Pos(line, ch);
                            }
                        }
                    }
                }
                var found = find(textNode, topNode, offset);
                if (found) {
                    return badPos(found, bad);
                }
                for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {
                    found = find(after, after.firstChild, 0);
                    if (found) {
                        return badPos(Pos(found.line, found.ch - dist), bad);
                    } else {
                        dist += after.textContent.length;
                    }
                }
                for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {
                    found = find(before, before.firstChild, -1);
                    if (found) {
                        return badPos(Pos(found.line, found.ch + dist$1), bad);
                    } else {
                        dist$1 += before.textContent.length;
                    }
                }
            }
            var TextareaInput = function (cm) {
                this.cm = cm;
                this.prevInput = "";
                this.pollingFast = false;
                this.polling = new Delayed();
                this.hasSelection = false;
                this.composing = null;
                this.resetting = false;
            };
            TextareaInput.prototype.init = function (display) {
                var this$1$1 = this;
                var input = this, cm = this.cm;
                this.createField(display);
                var te = this.textarea;
                display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);
                if (ios) {
                    te.style.width = "0px";
                }
                on(te, "input", function () {
                    if (ie && ie_version >= 9 && this$1$1.hasSelection) {
                        this$1$1.hasSelection = null;
                    }
                    input.poll();
                });
                on(te, "paste", function (e) {
                    if (signalDOMEvent(cm, e) || handlePaste(e, cm)) {
                        return;
                    }
                    cm.state.pasteIncoming = +new Date();
                    input.fastPoll();
                });
                function prepareCopyCut(e) {
                    if (signalDOMEvent(cm, e)) {
                        return;
                    }
                    if (cm.somethingSelected()) {
                        setLastCopied({
                            lineWise: false,
                            text: cm.getSelections()
                        });
                    } else if (!cm.options.lineWiseCopyCut) {
                        return;
                    } else {
                        var ranges = copyableRanges(cm);
                        setLastCopied({
                            lineWise: true,
                            text: ranges.text
                        });
                        if (e.type == "cut") {
                            cm.setSelections(ranges.ranges, null, sel_dontScroll);
                        } else {
                            input.prevInput = "";
                            te.value = ranges.text.join("\n");
                            selectInput(te);
                        }
                    }
                    if (e.type == "cut") {
                        cm.state.cutIncoming = +new Date();
                    }
                }
                on(te, "cut", prepareCopyCut);
                on(te, "copy", prepareCopyCut);
                on(display.scroller, "paste", function (e) {
                    if (eventInWidget(display, e) || signalDOMEvent(cm, e)) {
                        return;
                    }
                    if (!te.dispatchEvent) {
                        cm.state.pasteIncoming = +new Date();
                        input.focus();
                        return;
                    }
                    var event = new Event("paste");
                    event.clipboardData = e.clipboardData;
                    te.dispatchEvent(event);
                });
                on(display.lineSpace, "selectstart", function (e) {
                    if (!eventInWidget(display, e)) {
                        e_preventDefault(e);
                    }
                });
                on(te, "compositionstart", function () {
                    var start = cm.getCursor("from");
                    if (input.composing) {
                        input.composing.range.clear();
                    }
                    input.composing = {
                        start: start,
                        range: cm.markText(start, cm.getCursor("to"), {
                            className: "CodeMirror-composing"
                        })
                    };
                });
                on(te, "compositionend", function () {
                    if (input.composing) {
                        input.poll();
                        input.composing.range.clear();
                        input.composing = null;
                    }
                });
            };
            TextareaInput.prototype.createField = function (_display) {
                this.wrapper = hiddenTextarea();
                this.textarea = this.wrapper.firstChild;
                var opts = this.cm.options;
                disableBrowserMagic(this.textarea, opts.spellcheck, opts.autocorrect, opts.autocapitalize);
            };
            TextareaInput.prototype.screenReaderLabelChanged = function (label) {
                if (label) {
                    this.textarea.setAttribute('aria-label', label);
                } else {
                    this.textarea.removeAttribute('aria-label');
                }
            };
            TextareaInput.prototype.prepareSelection = function () {
                var cm = this.cm, display = cm.display, doc = cm.doc;
                var result = prepareSelection(cm);
                if (cm.options.moveInputWithCursor) {
                    var headPos = cursorCoords(cm, doc.sel.primary().head, "div");
                    var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();
                    result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10, headPos.top + lineOff.top - wrapOff.top));
                    result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10, headPos.left + lineOff.left - wrapOff.left));
                }
                return result;
            };
            TextareaInput.prototype.showSelection = function (drawn) {
                var cm = this.cm, display = cm.display;
                removeChildrenAndAdd(display.cursorDiv, drawn.cursors);
                removeChildrenAndAdd(display.selectionDiv, drawn.selection);
                if (drawn.teTop != null) {
                    this.wrapper.style.top = drawn.teTop + "px";
                    this.wrapper.style.left = drawn.teLeft + "px";
                }
            };
            TextareaInput.prototype.reset = function (typing) {
                if (this.contextMenuPending || this.composing && typing) {
                    return;
                }
                var cm = this.cm;
                this.resetting = true;
                if (cm.somethingSelected()) {
                    this.prevInput = "";
                    var content = cm.getSelection();
                    this.textarea.value = content;
                    if (cm.state.focused) {
                        selectInput(this.textarea);
                    }
                    if (ie && ie_version >= 9) {
                        this.hasSelection = content;
                    }
                } else if (!typing) {
                    this.prevInput = this.textarea.value = "";
                    if (ie && ie_version >= 9) {
                        this.hasSelection = null;
                    }
                }
                this.resetting = false;
            };
            TextareaInput.prototype.getField = function () {
                return this.textarea;
            };
            TextareaInput.prototype.supportsTouch = function () {
                return false;
            };
            TextareaInput.prototype.focus = function () {
                if (this.cm.options.readOnly != "nocursor" && (!mobile || activeElt(rootNode(this.textarea)) != this.textarea)) {
                    try {
                        this.textarea.focus();
                    } catch (e) {}
                }
            };
            TextareaInput.prototype.blur = function () {
                this.textarea.blur();
            };
            TextareaInput.prototype.resetPosition = function () {
                this.wrapper.style.top = this.wrapper.style.left = 0;
            };
            TextareaInput.prototype.receivedFocus = function () {
                this.slowPoll();
            };
            TextareaInput.prototype.slowPoll = function () {
                var this$1$1 = this;
                if (this.pollingFast) {
                    return;
                }
                this.polling.set(this.cm.options.pollInterval, function () {
                    this$1$1.poll();
                    if (this$1$1.cm.state.focused) {
                        this$1$1.slowPoll();
                    }
                });
            };
            TextareaInput.prototype.fastPoll = function () {
                var missed = false, input = this;
                input.pollingFast = true;
                function p() {
                    var changed = input.poll();
                    if (!changed && !missed) {
                        missed = true;
                        input.polling.set(60, p);
                    } else {
                        input.pollingFast = false;
                        input.slowPoll();
                    }
                }
                input.polling.set(20, p);
            };
            TextareaInput.prototype.poll = function () {
                var this$1$1 = this;
                var cm = this.cm, input = this.textarea, prevInput = this.prevInput;
                if (this.contextMenuPending || this.resetting || !cm.state.focused || hasSelection(input) && !prevInput && !this.composing || cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq) {
                    return false;
                }
                var text = input.value;
                if (text == prevInput && !cm.somethingSelected()) {
                    return false;
                }
                if (ie && ie_version >= 9 && this.hasSelection === text || mac && (/[\uf700-\uf7ff]/).test(text)) {
                    cm.display.input.reset();
                    return false;
                }
                if (cm.doc.sel == cm.display.selForContextMenu) {
                    var first = text.charCodeAt(0);
                    if (first == 0x200b && !prevInput) {
                        prevInput = "\u200b";
                    }
                    if (first == 0x21da) {
                        this.reset();
                        return this.cm.execCommand("undo");
                    }
                }
                var same = 0, l = Math.min(prevInput.length, text.length);
                while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) {
                    ++same;
                }
                runInOp(cm, function () {
                    applyTextInput(cm, text.slice(same), prevInput.length - same, null, this$1$1.composing ? "*compose" : null);
                    if (text.length > 1000 || text.indexOf("\n") > -1) {
                        input.value = this$1$1.prevInput = "";
                    } else {
                        this$1$1.prevInput = text;
                    }
                    if (this$1$1.composing) {
                        this$1$1.composing.range.clear();
                        this$1$1.composing.range = cm.markText(this$1$1.composing.start, cm.getCursor("to"), {
                            className: "CodeMirror-composing"
                        });
                    }
                });
                return true;
            };
            TextareaInput.prototype.ensurePolled = function () {
                if (this.pollingFast && this.poll()) {
                    this.pollingFast = false;
                }
            };
            TextareaInput.prototype.onKeyPress = function () {
                if (ie && ie_version >= 9) {
                    this.hasSelection = null;
                }
                this.fastPoll();
            };
            TextareaInput.prototype.onContextMenu = function (e) {
                var input = this, cm = input.cm, display = cm.display, te = input.textarea;
                if (input.contextMenuPending) {
                    input.contextMenuPending();
                }
                var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;
                if (!pos || presto) {
                    return;
                }
                var reset = cm.options.resetSelectionOnContextMenu;
                if (reset && cm.doc.sel.contains(pos) == -1) {
                    operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);
                }
                var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;
                var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();
                input.wrapper.style.cssText = "position: static";
                te.style.cssText = "position: absolute; width: 30px; height: 30px;\n      top: " + (e.clientY - wrapperBox.top - 5) + "px; left: " + (e.clientX - wrapperBox.left - 5) + "px;\n      z-index: 1000; background: " + (ie ? "rgba(255, 255, 255, .05)" : "transparent") + ";\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);";
                var oldScrollY;
                if (webkit) {
                    oldScrollY = te.ownerDocument.defaultView.scrollY;
                }
                display.input.focus();
                if (webkit) {
                    te.ownerDocument.defaultView.scrollTo(null, oldScrollY);
                }
                display.input.reset();
                if (!cm.somethingSelected()) {
                    te.value = input.prevInput = " ";
                }
                input.contextMenuPending = rehide;
                display.selForContextMenu = cm.doc.sel;
                clearTimeout(display.detectingSelectAll);
                function prepareSelectAllHack() {
                    if (te.selectionStart != null) {
                        var selected = cm.somethingSelected();
                        var extval = "\u200b" + (selected ? te.value : "");
                        te.value = "\u21da";
                        te.value = extval;
                        input.prevInput = selected ? "" : "\u200b";
                        te.selectionStart = 1;
                        te.selectionEnd = extval.length;
                        display.selForContextMenu = cm.doc.sel;
                    }
                }
                function rehide() {
                    if (input.contextMenuPending != rehide) {
                        return;
                    }
                    input.contextMenuPending = false;
                    input.wrapper.style.cssText = oldWrapperCSS;
                    te.style.cssText = oldCSS;
                    if (ie && ie_version < 9) {
                        display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos);
                    }
                    if (te.selectionStart != null) {
                        if (!ie || ie && ie_version < 9) {
                            prepareSelectAllHack();
                        }
                        var i = 0, poll = function () {
                            if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 && te.selectionEnd > 0 && input.prevInput == "\u200b") {
                                operation(cm, selectAll)(cm);
                            } else if (i++ < 10) {
                                display.detectingSelectAll = setTimeout(poll, 500);
                            } else {
                                display.selForContextMenu = null;
                                display.input.reset();
                            }
                        };
                        display.detectingSelectAll = setTimeout(poll, 200);
                    }
                }
                if (ie && ie_version >= 9) {
                    prepareSelectAllHack();
                }
                if (captureRightClick) {
                    e_stop(e);
                    var mouseup = function () {
                        off(window, "mouseup", mouseup);
                        setTimeout(rehide, 20);
                    };
                    on(window, "mouseup", mouseup);
                } else {
                    setTimeout(rehide, 50);
                }
            };
            TextareaInput.prototype.readOnlyChanged = function (val) {
                if (!val) {
                    this.reset();
                }
                this.textarea.disabled = val == "nocursor";
                this.textarea.readOnly = !!val;
            };
            TextareaInput.prototype.setUneditable = function () {};
            TextareaInput.prototype.needsContentAttribute = false;
            function fromTextArea(textarea, options) {
                options = options ? copyObj(options) : {};
                options.value = textarea.value;
                if (!options.tabindex && textarea.tabIndex) {
                    options.tabindex = textarea.tabIndex;
                }
                if (!options.placeholder && textarea.placeholder) {
                    options.placeholder = textarea.placeholder;
                }
                if (options.autofocus == null) {
                    var hasFocus = activeElt(rootNode(textarea));
                    options.autofocus = hasFocus == textarea || textarea.getAttribute("autofocus") != null && hasFocus == document.body;
                }
                function save() {
                    textarea.value = cm.getValue();
                }
                var realSubmit;
                if (textarea.form) {
                    on(textarea.form, "submit", save);
                    if (!options.leaveSubmitMethodAlone) {
                        var form = textarea.form;
                        realSubmit = form.submit;
                        try {
                            var wrappedSubmit = form.submit = function () {
                                save();
                                form.submit = realSubmit;
                                form.submit();
                                form.submit = wrappedSubmit;
                            };
                        } catch (e) {}
                    }
                }
                options.finishInit = function (cm) {
                    cm.save = save;
                    cm.getTextArea = function () {
                        return textarea;
                    };
                    cm.toTextArea = function () {
                        cm.toTextArea = isNaN;
                        save();
                        textarea.parentNode.removeChild(cm.getWrapperElement());
                        textarea.style.display = "";
                        if (textarea.form) {
                            off(textarea.form, "submit", save);
                            if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == "function") {
                                textarea.form.submit = realSubmit;
                            }
                        }
                    };
                };
                textarea.style.display = "none";
                var cm = CodeMirror(function (node) {
                    return textarea.parentNode.insertBefore(node, textarea.nextSibling);
                }, options);
                return cm;
            }
            function addLegacyProps(CodeMirror) {
                CodeMirror.off = off;
                CodeMirror.on = on;
                CodeMirror.wheelEventPixels = wheelEventPixels;
                CodeMirror.Doc = Doc;
                CodeMirror.splitLines = splitLinesAuto;
                CodeMirror.countColumn = countColumn;
                CodeMirror.findColumn = findColumn;
                CodeMirror.isWordChar = isWordCharBasic;
                CodeMirror.Pass = Pass;
                CodeMirror.signal = signal;
                CodeMirror.Line = Line;
                CodeMirror.changeEnd = changeEnd;
                CodeMirror.scrollbarModel = scrollbarModel;
                CodeMirror.Pos = Pos;
                CodeMirror.cmpPos = cmp;
                CodeMirror.modes = modes;
                CodeMirror.mimeModes = mimeModes;
                CodeMirror.resolveMode = resolveMode;
                CodeMirror.getMode = getMode;
                CodeMirror.modeExtensions = modeExtensions;
                CodeMirror.extendMode = extendMode;
                CodeMirror.copyState = copyState;
                CodeMirror.startState = startState;
                CodeMirror.innerMode = innerMode;
                CodeMirror.commands = commands;
                CodeMirror.keyMap = keyMap;
                CodeMirror.keyName = keyName;
                CodeMirror.isModifierKey = isModifierKey;
                CodeMirror.lookupKey = lookupKey;
                CodeMirror.normalizeKeyMap = normalizeKeyMap;
                CodeMirror.StringStream = StringStream;
                CodeMirror.SharedTextMarker = SharedTextMarker;
                CodeMirror.TextMarker = TextMarker;
                CodeMirror.LineWidget = LineWidget;
                CodeMirror.e_preventDefault = e_preventDefault;
                CodeMirror.e_stopPropagation = e_stopPropagation;
                CodeMirror.e_stop = e_stop;
                CodeMirror.addClass = addClass;
                CodeMirror.contains = contains;
                CodeMirror.rmClass = rmClass;
                CodeMirror.keyNames = keyNames;
            }
            defineOptions(CodeMirror);
            addEditorMethods(CodeMirror);
            var dontDelegate = ("iter insert remove copy getEditor constructor").split(" ");
            for (var prop in Doc.prototype) {
                if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0) {
                    CodeMirror.prototype[prop] = (function (method) {
                        return function () {
                            return method.apply(this.doc, arguments);
                        };
                    })(Doc.prototype[prop]);
                }
            }
            eventMixin(Doc);
            CodeMirror.inputStyles = {
                "textarea": TextareaInput,
                "contenteditable": ContentEditableInput
            };
            CodeMirror.defineMode = function (name) {
                if (!CodeMirror.defaults.mode && name != "null") {
                    CodeMirror.defaults.mode = name;
                }
                defineMode.apply(this, arguments);
            };
            CodeMirror.defineMIME = defineMIME;
            CodeMirror.defineMode("null", function () {
                return {
                    token: function (stream) {
                        return stream.skipToEnd();
                    }
                };
            });
            CodeMirror.defineMIME("text/plain", "null");
            CodeMirror.defineExtension = function (name, func) {
                CodeMirror.prototype[name] = func;
            };
            CodeMirror.defineDocExtension = function (name, func) {
                Doc.prototype[name] = func;
            };
            CodeMirror.fromTextArea = fromTextArea;
            addLegacyProps(CodeMirror);
            CodeMirror.version = "5.65.17";
            return CodeMirror;
        });
    })(codemirror);
    return codemirror.exports;
}

(function (module, exports) {
    (function (mod) {
        mod(requireCodemirror());
    })(function (CodeMirror) {
        CodeMirror.defineMode("javascript", function (config, parserConfig) {
            var indentUnit = config.indentUnit;
            var statementIndent = parserConfig.statementIndent;
            var jsonldMode = parserConfig.jsonld;
            var jsonMode = parserConfig.json || jsonldMode;
            var trackScope = parserConfig.trackScope !== false;
            var isTS = parserConfig.typescript;
            var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
            var keywords = (function () {
                function kw(type) {
                    return {
                        type: type,
                        style: "keyword"
                    };
                }
                var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d");
                var operator = kw("operator"), atom = {
                    type: "atom",
                    style: "atom"
                };
                return {
                    "if": kw("if"),
                    "while": A,
                    "with": A,
                    "else": B,
                    "do": B,
                    "try": B,
                    "finally": B,
                    "return": D,
                    "break": D,
                    "continue": D,
                    "new": kw("new"),
                    "delete": C,
                    "void": C,
                    "throw": C,
                    "debugger": kw("debugger"),
                    "var": kw("var"),
                    "const": kw("var"),
                    "let": kw("var"),
                    "function": kw("function"),
                    "catch": kw("catch"),
                    "for": kw("for"),
                    "switch": kw("switch"),
                    "case": kw("case"),
                    "default": kw("default"),
                    "in": operator,
                    "typeof": operator,
                    "instanceof": operator,
                    "true": atom,
                    "false": atom,
                    "null": atom,
                    "undefined": atom,
                    "NaN": atom,
                    "Infinity": atom,
                    "this": kw("this"),
                    "class": kw("class"),
                    "super": kw("atom"),
                    "yield": C,
                    "export": kw("export"),
                    "import": kw("import"),
                    "extends": C,
                    "await": C
                };
            })();
            var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
            var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
            function readRegexp(stream) {
                var escaped = false, next, inSet = false;
                while ((next = stream.next()) != null) {
                    if (!escaped) {
                        if (next == "/" && !inSet) return;
                        if (next == "[") inSet = true; else if (inSet && next == "]") inSet = false;
                    }
                    escaped = !escaped && next == "\\";
                }
            }
            var type, content;
            function ret(tp, style, cont) {
                type = tp;
                content = cont;
                return style;
            }
            function tokenBase(stream, state) {
                var ch = stream.next();
                if (ch == '"' || ch == "'") {
                    state.tokenize = tokenString(ch);
                    return state.tokenize(stream, state);
                } else if (ch == "." && stream.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/)) {
                    return ret("number", "number");
                } else if (ch == "." && stream.match("..")) {
                    return ret("spread", "meta");
                } else if ((/[\[\]{}\(\),;\:\.]/).test(ch)) {
                    return ret(ch);
                } else if (ch == "=" && stream.eat(">")) {
                    return ret("=>", "operator");
                } else if (ch == "0" && stream.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {
                    return ret("number", "number");
                } else if ((/\d/).test(ch)) {
                    stream.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/);
                    return ret("number", "number");
                } else if (ch == "/") {
                    if (stream.eat("*")) {
                        state.tokenize = tokenComment;
                        return tokenComment(stream, state);
                    } else if (stream.eat("/")) {
                        stream.skipToEnd();
                        return ret("comment", "comment");
                    } else if (expressionAllowed(stream, state, 1)) {
                        readRegexp(stream);
                        stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
                        return ret("regexp", "string-2");
                    } else {
                        stream.eat("=");
                        return ret("operator", "operator", stream.current());
                    }
                } else if (ch == "`") {
                    state.tokenize = tokenQuasi;
                    return tokenQuasi(stream, state);
                } else if (ch == "#" && stream.peek() == "!") {
                    stream.skipToEnd();
                    return ret("meta", "meta");
                } else if (ch == "#" && stream.eatWhile(wordRE)) {
                    return ret("variable", "property");
                } else if (ch == "<" && stream.match("!--") || ch == "-" && stream.match("->") && !(/\S/).test(stream.string.slice(0, stream.start))) {
                    stream.skipToEnd();
                    return ret("comment", "comment");
                } else if (isOperatorChar.test(ch)) {
                    if (ch != ">" || !state.lexical || state.lexical.type != ">") {
                        if (stream.eat("=")) {
                            if (ch == "!" || ch == "=") stream.eat("=");
                        } else if ((/[<>*+\-|&?]/).test(ch)) {
                            stream.eat(ch);
                            if (ch == ">") stream.eat(ch);
                        }
                    }
                    if (ch == "?" && stream.eat(".")) return ret(".");
                    return ret("operator", "operator", stream.current());
                } else if (wordRE.test(ch)) {
                    stream.eatWhile(wordRE);
                    var word = stream.current();
                    if (state.lastType != ".") {
                        if (keywords.propertyIsEnumerable(word)) {
                            var kw = keywords[word];
                            return ret(kw.type, kw.style, word);
                        }
                        if (word == "async" && stream.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/, false)) return ret("async", "keyword", word);
                    }
                    return ret("variable", "variable", word);
                }
            }
            function tokenString(quote) {
                return function (stream, state) {
                    var escaped = false, next;
                    if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)) {
                        state.tokenize = tokenBase;
                        return ret("jsonld-keyword", "meta");
                    }
                    while ((next = stream.next()) != null) {
                        if (next == quote && !escaped) break;
                        escaped = !escaped && next == "\\";
                    }
                    if (!escaped) state.tokenize = tokenBase;
                    return ret("string", "string");
                };
            }
            function tokenComment(stream, state) {
                var maybeEnd = false, ch;
                while (ch = stream.next()) {
                    if (ch == "/" && maybeEnd) {
                        state.tokenize = tokenBase;
                        break;
                    }
                    maybeEnd = ch == "*";
                }
                return ret("comment", "comment");
            }
            function tokenQuasi(stream, state) {
                var escaped = false, next;
                while ((next = stream.next()) != null) {
                    if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
                        state.tokenize = tokenBase;
                        break;
                    }
                    escaped = !escaped && next == "\\";
                }
                return ret("quasi", "string-2", stream.current());
            }
            var brackets = "([{}])";
            function findFatArrow(stream, state) {
                if (state.fatArrowAt) state.fatArrowAt = null;
                var arrow = stream.string.indexOf("=>", stream.start);
                if (arrow < 0) return;
                if (isTS) {
                    var m = (/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/).exec(stream.string.slice(stream.start, arrow));
                    if (m) arrow = m.index;
                }
                var depth = 0, sawSomething = false;
                for (var pos = arrow - 1; pos >= 0; --pos) {
                    var ch = stream.string.charAt(pos);
                    var bracket = brackets.indexOf(ch);
                    if (bracket >= 0 && bracket < 3) {
                        if (!depth) {
                            ++pos;
                            break;
                        }
                        if (--depth == 0) {
                            if (ch == "(") sawSomething = true;
                            break;
                        }
                    } else if (bracket >= 3 && bracket < 6) {
                        ++depth;
                    } else if (wordRE.test(ch)) {
                        sawSomething = true;
                    } else if ((/["'\/`]/).test(ch)) {
                        for (; ; --pos) {
                            if (pos == 0) return;
                            var next = stream.string.charAt(pos - 1);
                            if (next == ch && stream.string.charAt(pos - 2) != "\\") {
                                pos--;
                                break;
                            }
                        }
                    } else if (sawSomething && !depth) {
                        ++pos;
                        break;
                    }
                }
                if (sawSomething && !depth) state.fatArrowAt = pos;
            }
            var atomicTypes = {
                "atom": true,
                "number": true,
                "variable": true,
                "string": true,
                "regexp": true,
                "this": true,
                "import": true,
                "jsonld-keyword": true
            };
            function JSLexical(indented, column, type, align, prev, info) {
                this.indented = indented;
                this.column = column;
                this.type = type;
                this.prev = prev;
                this.info = info;
                if (align != null) this.align = align;
            }
            function inScope(state, varname) {
                if (!trackScope) return false;
                for (var v = state.localVars; v; v = v.next) if (v.name == varname) return true;
                for (var cx = state.context; cx; cx = cx.prev) {
                    for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true;
                }
            }
            function parseJS(state, style, type, content, stream) {
                var cc = state.cc;
                cx.state = state;
                cx.stream = stream;
                (cx.marked = null, cx.cc = cc);
                cx.style = style;
                if (!state.lexical.hasOwnProperty("align")) state.lexical.align = true;
                while (true) {
                    var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
                    if (combinator(type, content)) {
                        while (cc.length && cc[cc.length - 1].lex) cc.pop()();
                        if (cx.marked) return cx.marked;
                        if (type == "variable" && inScope(state, content)) return "variable-2";
                        return style;
                    }
                }
            }
            var cx = {
                state: null,
                column: null,
                marked: null,
                cc: null
            };
            function pass() {
                for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
            }
            function cont() {
                pass.apply(null, arguments);
                return true;
            }
            function inList(name, list) {
                for (var v = list; v; v = v.next) if (v.name == name) return true;
                return false;
            }
            function register(varname) {
                var state = cx.state;
                cx.marked = "def";
                if (!trackScope) return;
                if (state.context) {
                    if (state.lexical.info == "var" && state.context && state.context.block) {
                        var newContext = registerVarScoped(varname, state.context);
                        if (newContext != null) {
                            state.context = newContext;
                            return;
                        }
                    } else if (!inList(varname, state.localVars)) {
                        state.localVars = new Var(varname, state.localVars);
                        return;
                    }
                }
                if (parserConfig.globalVars && !inList(varname, state.globalVars)) state.globalVars = new Var(varname, state.globalVars);
            }
            function registerVarScoped(varname, context) {
                if (!context) {
                    return null;
                } else if (context.block) {
                    var inner = registerVarScoped(varname, context.prev);
                    if (!inner) return null;
                    if (inner == context.prev) return context;
                    return new Context(inner, context.vars, true);
                } else if (inList(varname, context.vars)) {
                    return context;
                } else {
                    return new Context(context.prev, new Var(varname, context.vars), false);
                }
            }
            function isModifier(name) {
                return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly";
            }
            function Context(prev, vars, block) {
                this.prev = prev;
                this.vars = vars;
                this.block = block;
            }
            function Var(name, next) {
                this.name = name;
                this.next = next;
            }
            var defaultVars = new Var("this", new Var("arguments", null));
            function pushcontext() {
                cx.state.context = new Context(cx.state.context, cx.state.localVars, false);
                cx.state.localVars = defaultVars;
            }
            function pushblockcontext() {
                cx.state.context = new Context(cx.state.context, cx.state.localVars, true);
                cx.state.localVars = null;
            }
            pushcontext.lex = pushblockcontext.lex = true;
            function popcontext() {
                cx.state.localVars = cx.state.context.vars;
                cx.state.context = cx.state.context.prev;
            }
            popcontext.lex = true;
            function pushlex(type, info) {
                var result = function () {
                    var state = cx.state, indent = state.indented;
                    if (state.lexical.type == "stat") indent = state.lexical.indented; else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev) indent = outer.indented;
                    state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
                };
                result.lex = true;
                return result;
            }
            function poplex() {
                var state = cx.state;
                if (state.lexical.prev) {
                    if (state.lexical.type == ")") state.indented = state.lexical.indented;
                    state.lexical = state.lexical.prev;
                }
            }
            poplex.lex = true;
            function expect(wanted) {
                function exp(type) {
                    if (type == wanted) return cont(); else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass(); else return cont(exp);
                }
                return exp;
            }
            function statement(type, value) {
                if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
                if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
                if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
                if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
                if (type == "debugger") return cont(expect(";"));
                if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
                if (type == ";") return cont();
                if (type == "if") {
                    if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex) cx.state.cc.pop()();
                    return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
                }
                if (type == "function") return cont(functiondef);
                if (type == "for") return cont(pushlex("form"), pushblockcontext, forspec, statement, popcontext, poplex);
                if (type == "class" || isTS && value == "interface") {
                    cx.marked = "keyword";
                    return cont(pushlex("form", type == "class" ? type : value), className, poplex);
                }
                if (type == "variable") {
                    if (isTS && value == "declare") {
                        cx.marked = "keyword";
                        return cont(statement);
                    } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) {
                        cx.marked = "keyword";
                        if (value == "enum") return cont(enumdef); else if (value == "type") return cont(typename, expect("operator"), typeexpr, expect(";")); else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex);
                    } else if (isTS && value == "namespace") {
                        cx.marked = "keyword";
                        return cont(pushlex("form"), expression, statement, poplex);
                    } else if (isTS && value == "abstract") {
                        cx.marked = "keyword";
                        return cont(statement);
                    } else {
                        return cont(pushlex("stat"), maybelabel);
                    }
                }
                if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext, block, poplex, poplex, popcontext);
                if (type == "case") return cont(expression, expect(":"));
                if (type == "default") return cont(expect(":"));
                if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
                if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
                if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
                if (type == "async") return cont(statement);
                if (value == "@") return cont(expression, statement);
                return pass(pushlex("stat"), expression, expect(";"), poplex);
            }
            function maybeCatchBinding(type) {
                if (type == "(") return cont(funarg, expect(")"));
            }
            function expression(type, value) {
                return expressionInner(type, value, false);
            }
            function expressionNoComma(type, value) {
                return expressionInner(type, value, true);
            }
            function parenExpr(type) {
                if (type != "(") return pass();
                return cont(pushlex(")"), maybeexpression, expect(")"), poplex);
            }
            function expressionInner(type, value, noComma) {
                if (cx.state.fatArrowAt == cx.stream.start) {
                    var body = noComma ? arrowBodyNoComma : arrowBody;
                    if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
                }
                var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
                if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
                if (type == "function") return cont(functiondef, maybeop);
                if (type == "class" || isTS && value == "interface") {
                    cx.marked = "keyword";
                    return cont(pushlex("form"), classExpression, poplex);
                }
                if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression);
                if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
                if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
                if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
                if (type == "{") return contCommasep(objprop, "}", null, maybeop);
                if (type == "quasi") return pass(quasi, maybeop);
                if (type == "new") return cont(maybeTarget(noComma));
                return cont();
            }
            function maybeexpression(type) {
                if (type.match(/[;\}\)\],]/)) return pass();
                return pass(expression);
            }
            function maybeoperatorComma(type, value) {
                if (type == ",") return cont(maybeexpression);
                return maybeoperatorNoComma(type, value, false);
            }
            function maybeoperatorNoComma(type, value, noComma) {
                var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
                var expr = noComma == false ? expression : expressionNoComma;
                if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
                if (type == "operator") {
                    if ((/\+\+|--/).test(value) || isTS && value == "!") return cont(me);
                    if (isTS && value == "<" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/, false)) return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me);
                    if (value == "?") return cont(expression, expect(":"), expr);
                    return cont(expr);
                }
                if (type == "quasi") {
                    return pass(quasi, me);
                }
                if (type == ";") return;
                if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
                if (type == ".") return cont(property, me);
                if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
                if (isTS && value == "as") {
                    cx.marked = "keyword";
                    return cont(typeexpr, me);
                }
                if (type == "regexp") {
                    cx.state.lastType = cx.marked = "operator";
                    cx.stream.backUp(cx.stream.pos - cx.stream.start - 1);
                    return cont(expr);
                }
            }
            function quasi(type, value) {
                if (type != "quasi") return pass();
                if (value.slice(value.length - 2) != "${") return cont(quasi);
                return cont(maybeexpression, continueQuasi);
            }
            function continueQuasi(type) {
                if (type == "}") {
                    cx.marked = "string-2";
                    cx.state.tokenize = tokenQuasi;
                    return cont(quasi);
                }
            }
            function arrowBody(type) {
                findFatArrow(cx.stream, cx.state);
                return pass(type == "{" ? statement : expression);
            }
            function arrowBodyNoComma(type) {
                findFatArrow(cx.stream, cx.state);
                return pass(type == "{" ? statement : expressionNoComma);
            }
            function maybeTarget(noComma) {
                return function (type) {
                    if (type == ".") return cont(noComma ? targetNoComma : target); else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma); else return pass(noComma ? expressionNoComma : expression);
                };
            }
            function target(_, value) {
                if (value == "target") {
                    cx.marked = "keyword";
                    return cont(maybeoperatorComma);
                }
            }
            function targetNoComma(_, value) {
                if (value == "target") {
                    cx.marked = "keyword";
                    return cont(maybeoperatorNoComma);
                }
            }
            function maybelabel(type) {
                if (type == ":") return cont(poplex, statement);
                return pass(maybeoperatorComma, expect(";"), poplex);
            }
            function property(type) {
                if (type == "variable") {
                    cx.marked = "property";
                    return cont();
                }
            }
            function objprop(type, value) {
                if (type == "async") {
                    cx.marked = "property";
                    return cont(objprop);
                } else if (type == "variable" || cx.style == "keyword") {
                    cx.marked = "property";
                    if (value == "get" || value == "set") return cont(getterSetter);
                    var m;
                    if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) cx.state.fatArrowAt = cx.stream.pos + m[0].length;
                    return cont(afterprop);
                } else if (type == "number" || type == "string") {
                    cx.marked = jsonldMode ? "property" : cx.style + " property";
                    return cont(afterprop);
                } else if (type == "jsonld-keyword") {
                    return cont(afterprop);
                } else if (isTS && isModifier(value)) {
                    cx.marked = "keyword";
                    return cont(objprop);
                } else if (type == "[") {
                    return cont(expression, maybetype, expect("]"), afterprop);
                } else if (type == "spread") {
                    return cont(expressionNoComma, afterprop);
                } else if (value == "*") {
                    cx.marked = "keyword";
                    return cont(objprop);
                } else if (type == ":") {
                    return pass(afterprop);
                }
            }
            function getterSetter(type) {
                if (type != "variable") return pass(afterprop);
                cx.marked = "property";
                return cont(functiondef);
            }
            function afterprop(type) {
                if (type == ":") return cont(expressionNoComma);
                if (type == "(") return pass(functiondef);
            }
            function commasep(what, end, sep) {
                function proceed(type, value) {
                    if (sep ? sep.indexOf(type) > -1 : type == ",") {
                        var lex = cx.state.lexical;
                        if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
                        return cont(function (type, value) {
                            if (type == end || value == end) return pass();
                            return pass(what);
                        }, proceed);
                    }
                    if (type == end || value == end) return cont();
                    if (sep && sep.indexOf(";") > -1) return pass(what);
                    return cont(expect(end));
                }
                return function (type, value) {
                    if (type == end || value == end) return cont();
                    return pass(what, proceed);
                };
            }
            function contCommasep(what, end, info) {
                for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]);
                return cont(pushlex(end, info), commasep(what, end), poplex);
            }
            function block(type) {
                if (type == "}") return cont();
                return pass(statement, block);
            }
            function maybetype(type, value) {
                if (isTS) {
                    if (type == ":") return cont(typeexpr);
                    if (value == "?") return cont(maybetype);
                }
            }
            function maybetypeOrIn(type, value) {
                if (isTS && (type == ":" || value == "in")) return cont(typeexpr);
            }
            function mayberettype(type) {
                if (isTS && type == ":") {
                    if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr); else return cont(typeexpr);
                }
            }
            function isKW(_, value) {
                if (value == "is") {
                    cx.marked = "keyword";
                    return cont();
                }
            }
            function typeexpr(type, value) {
                if (value == "keyof" || value == "typeof" || value == "infer" || value == "readonly") {
                    cx.marked = "keyword";
                    return cont(value == "typeof" ? expressionNoComma : typeexpr);
                }
                if (type == "variable" || value == "void") {
                    cx.marked = "type";
                    return cont(afterType);
                }
                if (value == "|" || value == "&") return cont(typeexpr);
                if (type == "string" || type == "number" || type == "atom") return cont(afterType);
                if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType);
                if (type == "{") return cont(pushlex("}"), typeprops, poplex, afterType);
                if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType, afterType);
                if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr);
                if (type == "quasi") {
                    return pass(quasiType, afterType);
                }
            }
            function maybeReturnType(type) {
                if (type == "=>") return cont(typeexpr);
            }
            function typeprops(type) {
                if (type.match(/[\}\)\]]/)) return cont();
                if (type == "," || type == ";") return cont(typeprops);
                return pass(typeprop, typeprops);
            }
            function typeprop(type, value) {
                if (type == "variable" || cx.style == "keyword") {
                    cx.marked = "property";
                    return cont(typeprop);
                } else if (value == "?" || type == "number" || type == "string") {
                    return cont(typeprop);
                } else if (type == ":") {
                    return cont(typeexpr);
                } else if (type == "[") {
                    return cont(expect("variable"), maybetypeOrIn, expect("]"), typeprop);
                } else if (type == "(") {
                    return pass(functiondecl, typeprop);
                } else if (!type.match(/[;\}\)\],]/)) {
                    return cont();
                }
            }
            function quasiType(type, value) {
                if (type != "quasi") return pass();
                if (value.slice(value.length - 2) != "${") return cont(quasiType);
                return cont(typeexpr, continueQuasiType);
            }
            function continueQuasiType(type) {
                if (type == "}") {
                    cx.marked = "string-2";
                    cx.state.tokenize = tokenQuasi;
                    return cont(quasiType);
                }
            }
            function typearg(type, value) {
                if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg);
                if (type == ":") return cont(typeexpr);
                if (type == "spread") return cont(typearg);
                return pass(typeexpr);
            }
            function afterType(type, value) {
                if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType);
                if (value == "|" || type == "." || value == "&") return cont(typeexpr);
                if (type == "[") return cont(typeexpr, expect("]"), afterType);
                if (value == "extends" || value == "implements") {
                    cx.marked = "keyword";
                    return cont(typeexpr);
                }
                if (value == "?") return cont(typeexpr, expect(":"), typeexpr);
            }
            function maybeTypeArgs(_, value) {
                if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType);
            }
            function typeparam() {
                return pass(typeexpr, maybeTypeDefault);
            }
            function maybeTypeDefault(_, value) {
                if (value == "=") return cont(typeexpr);
            }
            function vardef(_, value) {
                if (value == "enum") {
                    cx.marked = "keyword";
                    return cont(enumdef);
                }
                return pass(pattern, maybetype, maybeAssign, vardefCont);
            }
            function pattern(type, value) {
                if (isTS && isModifier(value)) {
                    cx.marked = "keyword";
                    return cont(pattern);
                }
                if (type == "variable") {
                    register(value);
                    return cont();
                }
                if (type == "spread") return cont(pattern);
                if (type == "[") return contCommasep(eltpattern, "]");
                if (type == "{") return contCommasep(proppattern, "}");
            }
            function proppattern(type, value) {
                if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
                    register(value);
                    return cont(maybeAssign);
                }
                if (type == "variable") cx.marked = "property";
                if (type == "spread") return cont(pattern);
                if (type == "}") return pass();
                if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern);
                return cont(expect(":"), pattern, maybeAssign);
            }
            function eltpattern() {
                return pass(pattern, maybeAssign);
            }
            function maybeAssign(_type, value) {
                if (value == "=") return cont(expressionNoComma);
            }
            function vardefCont(type) {
                if (type == ",") return cont(vardef);
            }
            function maybeelse(type, value) {
                if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
            }
            function forspec(type, value) {
                if (value == "await") return cont(forspec);
                if (type == "(") return cont(pushlex(")"), forspec1, poplex);
            }
            function forspec1(type) {
                if (type == "var") return cont(vardef, forspec2);
                if (type == "variable") return cont(forspec2);
                return pass(forspec2);
            }
            function forspec2(type, value) {
                if (type == ")") return cont();
                if (type == ";") return cont(forspec2);
                if (value == "in" || value == "of") {
                    cx.marked = "keyword";
                    return cont(expression, forspec2);
                }
                return pass(expression, forspec2);
            }
            function functiondef(type, value) {
                if (value == "*") {
                    cx.marked = "keyword";
                    return cont(functiondef);
                }
                if (type == "variable") {
                    register(value);
                    return cont(functiondef);
                }
                if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext);
                if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef);
            }
            function functiondecl(type, value) {
                if (value == "*") {
                    cx.marked = "keyword";
                    return cont(functiondecl);
                }
                if (type == "variable") {
                    register(value);
                    return cont(functiondecl);
                }
                if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext);
                if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl);
            }
            function typename(type, value) {
                if (type == "keyword" || type == "variable") {
                    cx.marked = "type";
                    return cont(typename);
                } else if (value == "<") {
                    return cont(pushlex(">"), commasep(typeparam, ">"), poplex);
                }
            }
            function funarg(type, value) {
                if (value == "@") cont(expression, funarg);
                if (type == "spread") return cont(funarg);
                if (isTS && isModifier(value)) {
                    cx.marked = "keyword";
                    return cont(funarg);
                }
                if (isTS && type == "this") return cont(maybetype, maybeAssign);
                return pass(pattern, maybetype, maybeAssign);
            }
            function classExpression(type, value) {
                if (type == "variable") return className(type, value);
                return classNameAfter(type, value);
            }
            function className(type, value) {
                if (type == "variable") {
                    register(value);
                    return cont(classNameAfter);
                }
            }
            function classNameAfter(type, value) {
                if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter);
                if (value == "extends" || value == "implements" || isTS && type == ",") {
                    if (value == "implements") cx.marked = "keyword";
                    return cont(isTS ? typeexpr : expression, classNameAfter);
                }
                if (type == "{") return cont(pushlex("}"), classBody, poplex);
            }
            function classBody(type, value) {
                if (type == "async" || type == "variable" && (value == "static" || value == "get" || value == "set" || isTS && isModifier(value)) && cx.stream.match(/^\s+#?[\w$\xa1-\uffff]/, false)) {
                    cx.marked = "keyword";
                    return cont(classBody);
                }
                if (type == "variable" || cx.style == "keyword") {
                    cx.marked = "property";
                    return cont(classfield, classBody);
                }
                if (type == "number" || type == "string") return cont(classfield, classBody);
                if (type == "[") return cont(expression, maybetype, expect("]"), classfield, classBody);
                if (value == "*") {
                    cx.marked = "keyword";
                    return cont(classBody);
                }
                if (isTS && type == "(") return pass(functiondecl, classBody);
                if (type == ";" || type == ",") return cont(classBody);
                if (type == "}") return cont();
                if (value == "@") return cont(expression, classBody);
            }
            function classfield(type, value) {
                if (value == "!") return cont(classfield);
                if (value == "?") return cont(classfield);
                if (type == ":") return cont(typeexpr, maybeAssign);
                if (value == "=") return cont(expressionNoComma);
                var context = cx.state.lexical.prev, isInterface = context && context.info == "interface";
                return pass(isInterface ? functiondecl : functiondef);
            }
            function afterExport(type, value) {
                if (value == "*") {
                    cx.marked = "keyword";
                    return cont(maybeFrom, expect(";"));
                }
                if (value == "default") {
                    cx.marked = "keyword";
                    return cont(expression, expect(";"));
                }
                if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
                return pass(statement);
            }
            function exportField(type, value) {
                if (value == "as") {
                    cx.marked = "keyword";
                    return cont(expect("variable"));
                }
                if (type == "variable") return pass(expressionNoComma, exportField);
            }
            function afterImport(type) {
                if (type == "string") return cont();
                if (type == "(") return pass(expression);
                if (type == ".") return pass(maybeoperatorComma);
                return pass(importSpec, maybeMoreImports, maybeFrom);
            }
            function importSpec(type, value) {
                if (type == "{") return contCommasep(importSpec, "}");
                if (type == "variable") register(value);
                if (value == "*") cx.marked = "keyword";
                return cont(maybeAs);
            }
            function maybeMoreImports(type) {
                if (type == ",") return cont(importSpec, maybeMoreImports);
            }
            function maybeAs(_type, value) {
                if (value == "as") {
                    cx.marked = "keyword";
                    return cont(importSpec);
                }
            }
            function maybeFrom(_type, value) {
                if (value == "from") {
                    cx.marked = "keyword";
                    return cont(expression);
                }
            }
            function arrayLiteral(type) {
                if (type == "]") return cont();
                return pass(commasep(expressionNoComma, "]"));
            }
            function enumdef() {
                return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex);
            }
            function enummember() {
                return pass(pattern, maybeAssign);
            }
            function isContinuedStatement(state, textAfter) {
                return state.lastType == "operator" || state.lastType == "," || isOperatorChar.test(textAfter.charAt(0)) || (/[,.]/).test(textAfter.charAt(0));
            }
            function expressionAllowed(stream, state, backUp) {
                return state.tokenize == tokenBase && (/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/).test(state.lastType) || state.lastType == "quasi" && (/\{\s*$/).test(stream.string.slice(0, stream.pos - (backUp || 0)));
            }
            return {
                startState: function (basecolumn) {
                    var state = {
                        tokenize: tokenBase,
                        lastType: "sof",
                        cc: [],
                        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
                        localVars: parserConfig.localVars,
                        context: parserConfig.localVars && new Context(null, null, false),
                        indented: basecolumn || 0
                    };
                    if (parserConfig.globalVars && typeof parserConfig.globalVars == "object") state.globalVars = parserConfig.globalVars;
                    return state;
                },
                token: function (stream, state) {
                    if (stream.sol()) {
                        if (!state.lexical.hasOwnProperty("align")) state.lexical.align = false;
                        state.indented = stream.indentation();
                        findFatArrow(stream, state);
                    }
                    if (state.tokenize != tokenComment && stream.eatSpace()) return null;
                    var style = state.tokenize(stream, state);
                    if (type == "comment") return style;
                    state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
                    return parseJS(state, style, type, content, stream);
                },
                indent: function (state, textAfter) {
                    if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass;
                    if (state.tokenize != tokenBase) return 0;
                    var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top;
                    if (!(/^\s*else\b/).test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
                        var c = state.cc[i];
                        if (c == poplex) lexical = lexical.prev; else if (c != maybeelse && c != popcontext) break;
                    }
                    while ((lexical.type == "stat" || lexical.type == "form") && (firstChar == "}" || (top = state.cc[state.cc.length - 1]) && (top == maybeoperatorComma || top == maybeoperatorNoComma) && !(/^[,\.=+\-*:?[\(]/).test(textAfter))) lexical = lexical.prev;
                    if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat") lexical = lexical.prev;
                    var type = lexical.type, closing = firstChar == type;
                    if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0); else if (type == "form" && firstChar == "{") return lexical.indented; else if (type == "form") return lexical.indented + indentUnit; else if (type == "stat") return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0); else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false) return lexical.indented + ((/^(?:case|default)\b/).test(textAfter) ? indentUnit : 2 * indentUnit); else if (lexical.align) return lexical.column + (closing ? 0 : 1); else return lexical.indented + (closing ? 0 : indentUnit);
                },
                electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
                blockCommentStart: jsonMode ? null : "/*",
                blockCommentEnd: jsonMode ? null : "*/",
                blockCommentContinue: jsonMode ? null : " * ",
                lineComment: jsonMode ? null : "//",
                fold: "brace",
                closeBrackets: "()[]{}''\"\"``",
                helperType: jsonMode ? "json" : "javascript",
                jsonldMode: jsonldMode,
                jsonMode: jsonMode,
                expressionAllowed: expressionAllowed,
                skipExpression: function (state) {
                    parseJS(state, "atom", "atom", "true", new CodeMirror.StringStream("", 2, null));
                }
            };
        });
        CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
        CodeMirror.defineMIME("text/javascript", "javascript");
        CodeMirror.defineMIME("text/ecmascript", "javascript");
        CodeMirror.defineMIME("application/javascript", "javascript");
        CodeMirror.defineMIME("application/x-javascript", "javascript");
        CodeMirror.defineMIME("application/ecmascript", "javascript");
        CodeMirror.defineMIME("application/json", {
            name: "javascript",
            json: true
        });
        CodeMirror.defineMIME("application/x-json", {
            name: "javascript",
            json: true
        });
        CodeMirror.defineMIME("application/manifest+json", {
            name: "javascript",
            json: true
        });
        CodeMirror.defineMIME("application/ld+json", {
            name: "javascript",
            jsonld: true
        });
        CodeMirror.defineMIME("text/typescript", {
            name: "javascript",
            typescript: true
        });
        CodeMirror.defineMIME("application/typescript", {
            name: "javascript",
            typescript: true
        });
    });
})();
var javascriptExports = javascript.exports;
getDefaultExportFromCjs(javascriptExports);

var showHint = {exports: {}};

(function (module, exports) {
    (function (mod) {
        mod(requireCodemirror());
    })(function (CodeMirror) {
        var HINT_ELEMENT_CLASS = "CodeMirror-hint";
        var ACTIVE_HINT_ELEMENT_CLASS = "CodeMirror-hint-active";
        CodeMirror.showHint = function (cm, getHints, options) {
            if (!getHints) return cm.showHint(options);
            if (options && options.async) getHints.async = true;
            var newOpts = {
                hint: getHints
            };
            if (options) for (var prop in options) newOpts[prop] = options[prop];
            return cm.showHint(newOpts);
        };
        CodeMirror.defineExtension("showHint", function (options) {
            options = parseOptions(this, this.getCursor("start"), options);
            var selections = this.listSelections();
            if (selections.length > 1) return;
            if (this.somethingSelected()) {
                if (!options.hint.supportsSelection) return;
                for (var i = 0; i < selections.length; i++) if (selections[i].head.line != selections[i].anchor.line) return;
            }
            if (this.state.completionActive) this.state.completionActive.close();
            var completion = this.state.completionActive = new Completion(this, options);
            if (!completion.options.hint) return;
            CodeMirror.signal(this, "startCompletion", this);
            completion.update(true);
        });
        CodeMirror.defineExtension("closeHint", function () {
            if (this.state.completionActive) this.state.completionActive.close();
        });
        function Completion(cm, options) {
            this.cm = cm;
            this.options = options;
            this.widget = null;
            this.debounce = 0;
            this.tick = 0;
            this.startPos = this.cm.getCursor("start");
            this.startLen = this.cm.getLine(this.startPos.line).length - this.cm.getSelection().length;
            if (this.options.updateOnCursorActivity) {
                var self = this;
                cm.on("cursorActivity", this.activityFunc = function () {
                    self.cursorActivity();
                });
            }
        }
        var requestAnimationFrame = window.requestAnimationFrame || (function (fn) {
            return setTimeout(fn, 1000 / 60);
        });
        var cancelAnimationFrame = window.cancelAnimationFrame || clearTimeout;
        Completion.prototype = {
            close: function () {
                if (!this.active()) return;
                this.cm.state.completionActive = null;
                this.tick = null;
                if (this.options.updateOnCursorActivity) {
                    this.cm.off("cursorActivity", this.activityFunc);
                }
                if (this.widget && this.data) CodeMirror.signal(this.data, "close");
                if (this.widget) this.widget.close();
                CodeMirror.signal(this.cm, "endCompletion", this.cm);
            },
            active: function () {
                return this.cm.state.completionActive == this;
            },
            pick: function (data, i) {
                var completion = data.list[i], self = this;
                this.cm.operation(function () {
                    if (completion.hint) completion.hint(self.cm, data, completion); else self.cm.replaceRange(getText(completion), completion.from || data.from, completion.to || data.to, "complete");
                    CodeMirror.signal(data, "pick", completion);
                    self.cm.scrollIntoView();
                });
                if (this.options.closeOnPick) {
                    this.close();
                }
            },
            cursorActivity: function () {
                if (this.debounce) {
                    cancelAnimationFrame(this.debounce);
                    this.debounce = 0;
                }
                var identStart = this.startPos;
                if (this.data) {
                    identStart = this.data.from;
                }
                var pos = this.cm.getCursor(), line = this.cm.getLine(pos.line);
                if (pos.line != this.startPos.line || line.length - pos.ch != this.startLen - this.startPos.ch || pos.ch < identStart.ch || this.cm.somethingSelected() || (!pos.ch || this.options.closeCharacters.test(line.charAt(pos.ch - 1)))) {
                    this.close();
                } else {
                    var self = this;
                    this.debounce = requestAnimationFrame(function () {
                        self.update();
                    });
                    if (this.widget) this.widget.disable();
                }
            },
            update: function (first) {
                if (this.tick == null) return;
                var self = this, myTick = ++this.tick;
                fetchHints(this.options.hint, this.cm, this.options, function (data) {
                    if (self.tick == myTick) self.finishUpdate(data, first);
                });
            },
            finishUpdate: function (data, first) {
                if (this.data) CodeMirror.signal(this.data, "update");
                var picked = this.widget && this.widget.picked || first && this.options.completeSingle;
                if (this.widget) this.widget.close();
                this.data = data;
                if (data && data.list.length) {
                    if (picked && data.list.length == 1) {
                        this.pick(data, 0);
                    } else {
                        this.widget = new Widget(this, data);
                        CodeMirror.signal(data, "shown");
                    }
                }
            }
        };
        function parseOptions(cm, pos, options) {
            var editor = cm.options.hintOptions;
            var out = {};
            for (var prop in defaultOptions) out[prop] = defaultOptions[prop];
            if (editor) for (var prop in editor) if (editor[prop] !== undefined) out[prop] = editor[prop];
            if (options) for (var prop in options) if (options[prop] !== undefined) out[prop] = options[prop];
            if (out.hint.resolve) out.hint = out.hint.resolve(cm, pos);
            return out;
        }
        function getText(completion) {
            if (typeof completion == "string") return completion; else return completion.text;
        }
        function buildKeyMap(completion, handle) {
            var baseMap = {
                Up: function () {
                    handle.moveFocus(-1);
                },
                Down: function () {
                    handle.moveFocus(1);
                },
                PageUp: function () {
                    handle.moveFocus(-handle.menuSize() + 1, true);
                },
                PageDown: function () {
                    handle.moveFocus(handle.menuSize() - 1, true);
                },
                Home: function () {
                    handle.setFocus(0);
                },
                End: function () {
                    handle.setFocus(handle.length - 1);
                },
                Enter: handle.pick,
                Tab: handle.pick,
                Esc: handle.close
            };
            var mac = (/Mac/).test(navigator.platform);
            if (mac) {
                baseMap["Ctrl-P"] = function () {
                    handle.moveFocus(-1);
                };
                baseMap["Ctrl-N"] = function () {
                    handle.moveFocus(1);
                };
            }
            var custom = completion.options.customKeys;
            var ourMap = custom ? {} : baseMap;
            function addBinding(key, val) {
                var bound;
                if (typeof val != "string") bound = function (cm) {
                    return val(cm, handle);
                }; else if (baseMap.hasOwnProperty(val)) bound = baseMap[val]; else bound = val;
                ourMap[key] = bound;
            }
            if (custom) for (var key in custom) if (custom.hasOwnProperty(key)) addBinding(key, custom[key]);
            var extra = completion.options.extraKeys;
            if (extra) for (var key in extra) if (extra.hasOwnProperty(key)) addBinding(key, extra[key]);
            return ourMap;
        }
        function getHintElement(hintsElement, el) {
            while (el && el != hintsElement) {
                if (el.nodeName.toUpperCase() === "LI" && el.parentNode == hintsElement) return el;
                el = el.parentNode;
            }
        }
        function Widget(completion, data) {
            this.id = "cm-complete-" + Math.floor(Math.random(1e6));
            this.completion = completion;
            this.data = data;
            this.picked = false;
            var widget = this, cm = completion.cm;
            var ownerDocument = cm.getInputField().ownerDocument;
            var parentWindow = ownerDocument.defaultView || ownerDocument.parentWindow;
            var hints = this.hints = ownerDocument.createElement("ul");
            hints.setAttribute("role", "listbox");
            hints.setAttribute("aria-expanded", "true");
            hints.id = this.id;
            var theme = completion.cm.options.theme;
            hints.className = "CodeMirror-hints " + theme;
            this.selectedHint = data.selectedHint || 0;
            var completions = data.list;
            for (var i = 0; i < completions.length; ++i) {
                var elt = hints.appendChild(ownerDocument.createElement("li")), cur = completions[i];
                var className = HINT_ELEMENT_CLASS + (i != this.selectedHint ? "" : " " + ACTIVE_HINT_ELEMENT_CLASS);
                if (cur.className != null) className = cur.className + " " + className;
                elt.className = className;
                if (i == this.selectedHint) elt.setAttribute("aria-selected", "true");
                elt.id = this.id + "-" + i;
                elt.setAttribute("role", "option");
                if (cur.render) cur.render(elt, data, cur); else elt.appendChild(ownerDocument.createTextNode(cur.displayText || getText(cur)));
                elt.hintId = i;
            }
            var container = completion.options.container || ownerDocument.body;
            var pos = cm.cursorCoords(completion.options.alignWithWord ? data.from : null);
            var left = pos.left, top = pos.bottom, below = true;
            var offsetLeft = 0, offsetTop = 0;
            if (container !== ownerDocument.body) {
                var isContainerPositioned = ['absolute', 'relative', 'fixed'].indexOf(parentWindow.getComputedStyle(container).position) !== -1;
                var offsetParent = isContainerPositioned ? container : container.offsetParent;
                var offsetParentPosition = offsetParent.getBoundingClientRect();
                var bodyPosition = ownerDocument.body.getBoundingClientRect();
                offsetLeft = offsetParentPosition.left - bodyPosition.left - offsetParent.scrollLeft;
                offsetTop = offsetParentPosition.top - bodyPosition.top - offsetParent.scrollTop;
            }
            hints.style.left = left - offsetLeft + "px";
            hints.style.top = top - offsetTop + "px";
            var winW = parentWindow.innerWidth || Math.max(ownerDocument.body.offsetWidth, ownerDocument.documentElement.offsetWidth);
            var winH = parentWindow.innerHeight || Math.max(ownerDocument.body.offsetHeight, ownerDocument.documentElement.offsetHeight);
            container.appendChild(hints);
            cm.getInputField().setAttribute("aria-autocomplete", "list");
            cm.getInputField().setAttribute("aria-owns", this.id);
            cm.getInputField().setAttribute("aria-activedescendant", this.id + "-" + this.selectedHint);
            var box = completion.options.moveOnOverlap ? hints.getBoundingClientRect() : new DOMRect();
            var scrolls = completion.options.paddingForScrollbar ? hints.scrollHeight > hints.clientHeight + 1 : false;
            var startScroll;
            setTimeout(function () {
                startScroll = cm.getScrollInfo();
            });
            var overlapY = box.bottom - winH;
            if (overlapY > 0) {
                var height = box.bottom - box.top, spaceAbove = box.top - (pos.bottom - pos.top) - 2;
                if (winH - box.top < spaceAbove) {
                    if (height > spaceAbove) hints.style.height = (height = spaceAbove) + "px";
                    hints.style.top = (top = pos.top - height) + offsetTop + "px";
                    below = false;
                } else {
                    hints.style.height = winH - box.top - 2 + "px";
                }
            }
            var overlapX = box.right - winW;
            if (scrolls) overlapX += cm.display.nativeBarWidth;
            if (overlapX > 0) {
                if (box.right - box.left > winW) {
                    hints.style.width = winW - 5 + "px";
                    overlapX -= box.right - box.left - winW;
                }
                hints.style.left = (left = Math.max(pos.left - overlapX - offsetLeft, 0)) + "px";
            }
            if (scrolls) for (var node = hints.firstChild; node; node = node.nextSibling) node.style.paddingRight = cm.display.nativeBarWidth + "px";
            cm.addKeyMap(this.keyMap = buildKeyMap(completion, {
                moveFocus: function (n, avoidWrap) {
                    widget.changeActive(widget.selectedHint + n, avoidWrap);
                },
                setFocus: function (n) {
                    widget.changeActive(n);
                },
                menuSize: function () {
                    return widget.screenAmount();
                },
                length: completions.length,
                close: function () {
                    completion.close();
                },
                pick: function () {
                    widget.pick();
                },
                data: data
            }));
            if (completion.options.closeOnUnfocus) {
                var closingOnBlur;
                cm.on("blur", this.onBlur = function () {
                    closingOnBlur = setTimeout(function () {
                        completion.close();
                    }, 100);
                });
                cm.on("focus", this.onFocus = function () {
                    clearTimeout(closingOnBlur);
                });
            }
            cm.on("scroll", this.onScroll = function () {
                var curScroll = cm.getScrollInfo(), editor = cm.getWrapperElement().getBoundingClientRect();
                if (!startScroll) startScroll = cm.getScrollInfo();
                var newTop = top + startScroll.top - curScroll.top;
                var point = newTop - (parentWindow.pageYOffset || (ownerDocument.documentElement || ownerDocument.body).scrollTop);
                if (!below) point += hints.offsetHeight;
                if (point <= editor.top || point >= editor.bottom) return completion.close();
                hints.style.top = newTop + "px";
                hints.style.left = left + startScroll.left - curScroll.left + "px";
            });
            CodeMirror.on(hints, "dblclick", function (e) {
                var t = getHintElement(hints, e.target || e.srcElement);
                if (t && t.hintId != null) {
                    widget.changeActive(t.hintId);
                    widget.pick();
                }
            });
            CodeMirror.on(hints, "click", function (e) {
                var t = getHintElement(hints, e.target || e.srcElement);
                if (t && t.hintId != null) {
                    widget.changeActive(t.hintId);
                    if (completion.options.completeOnSingleClick) widget.pick();
                }
            });
            CodeMirror.on(hints, "mousedown", function () {
                setTimeout(function () {
                    cm.focus();
                }, 20);
            });
            var selectedHintRange = this.getSelectedHintRange();
            if (selectedHintRange.from !== 0 || selectedHintRange.to !== 0) {
                this.scrollToActive();
            }
            CodeMirror.signal(data, "select", completions[this.selectedHint], hints.childNodes[this.selectedHint]);
            return true;
        }
        Widget.prototype = {
            close: function () {
                if (this.completion.widget != this) return;
                this.completion.widget = null;
                if (this.hints.parentNode) this.hints.parentNode.removeChild(this.hints);
                this.completion.cm.removeKeyMap(this.keyMap);
                var input = this.completion.cm.getInputField();
                input.removeAttribute("aria-activedescendant");
                input.removeAttribute("aria-owns");
                var cm = this.completion.cm;
                if (this.completion.options.closeOnUnfocus) {
                    cm.off("blur", this.onBlur);
                    cm.off("focus", this.onFocus);
                }
                cm.off("scroll", this.onScroll);
            },
            disable: function () {
                this.completion.cm.removeKeyMap(this.keyMap);
                var widget = this;
                this.keyMap = {
                    Enter: function () {
                        widget.picked = true;
                    }
                };
                this.completion.cm.addKeyMap(this.keyMap);
            },
            pick: function () {
                this.completion.pick(this.data, this.selectedHint);
            },
            changeActive: function (i, avoidWrap) {
                if (i >= this.data.list.length) i = avoidWrap ? this.data.list.length - 1 : 0; else if (i < 0) i = avoidWrap ? 0 : this.data.list.length - 1;
                if (this.selectedHint == i) return;
                var node = this.hints.childNodes[this.selectedHint];
                if (node) {
                    node.className = node.className.replace(" " + ACTIVE_HINT_ELEMENT_CLASS, "");
                    node.removeAttribute("aria-selected");
                }
                node = this.hints.childNodes[this.selectedHint = i];
                node.className += " " + ACTIVE_HINT_ELEMENT_CLASS;
                node.setAttribute("aria-selected", "true");
                this.completion.cm.getInputField().setAttribute("aria-activedescendant", node.id);
                this.scrollToActive();
                CodeMirror.signal(this.data, "select", this.data.list[this.selectedHint], node);
            },
            scrollToActive: function () {
                var selectedHintRange = this.getSelectedHintRange();
                var node1 = this.hints.childNodes[selectedHintRange.from];
                var node2 = this.hints.childNodes[selectedHintRange.to];
                var firstNode = this.hints.firstChild;
                if (node1.offsetTop < this.hints.scrollTop) this.hints.scrollTop = node1.offsetTop - firstNode.offsetTop; else if (node2.offsetTop + node2.offsetHeight > this.hints.scrollTop + this.hints.clientHeight) this.hints.scrollTop = node2.offsetTop + node2.offsetHeight - this.hints.clientHeight + firstNode.offsetTop;
            },
            screenAmount: function () {
                return Math.floor(this.hints.clientHeight / this.hints.firstChild.offsetHeight) || 1;
            },
            getSelectedHintRange: function () {
                var margin = this.completion.options.scrollMargin || 0;
                return {
                    from: Math.max(0, this.selectedHint - margin),
                    to: Math.min(this.data.list.length - 1, this.selectedHint + margin)
                };
            }
        };
        function applicableHelpers(cm, helpers) {
            if (!cm.somethingSelected()) return helpers;
            var result = [];
            for (var i = 0; i < helpers.length; i++) if (helpers[i].supportsSelection) result.push(helpers[i]);
            return result;
        }
        function fetchHints(hint, cm, options, callback) {
            if (hint.async) {
                hint(cm, callback, options);
            } else {
                var result = hint(cm, options);
                if (result && result.then) result.then(callback); else callback(result);
            }
        }
        function resolveAutoHints(cm, pos) {
            var helpers = cm.getHelpers(pos, "hint"), words;
            if (helpers.length) {
                var resolved = function (cm, callback, options) {
                    var app = applicableHelpers(cm, helpers);
                    function run(i) {
                        if (i == app.length) return callback(null);
                        fetchHints(app[i], cm, options, function (result) {
                            if (result && result.list.length > 0) callback(result); else run(i + 1);
                        });
                    }
                    run(0);
                };
                resolved.async = true;
                resolved.supportsSelection = true;
                return resolved;
            } else if (words = cm.getHelper(cm.getCursor(), "hintWords")) {
                return function (cm) {
                    return CodeMirror.hint.fromList(cm, {
                        words: words
                    });
                };
            } else if (CodeMirror.hint.anyword) {
                return function (cm, options) {
                    return CodeMirror.hint.anyword(cm, options);
                };
            } else {
                return function () {};
            }
        }
        CodeMirror.registerHelper("hint", "auto", {
            resolve: resolveAutoHints
        });
        CodeMirror.registerHelper("hint", "fromList", function (cm, options) {
            var cur = cm.getCursor(), token = cm.getTokenAt(cur);
            var term, from = CodeMirror.Pos(cur.line, token.start), to = cur;
            if (token.start < cur.ch && (/\w/).test(token.string.charAt(cur.ch - token.start - 1))) {
                term = token.string.substr(0, cur.ch - token.start);
            } else {
                term = "";
                from = cur;
            }
            var found = [];
            for (var i = 0; i < options.words.length; i++) {
                var word = options.words[i];
                if (word.slice(0, term.length) == term) found.push(word);
            }
            if (found.length) return {
                list: found,
                from: from,
                to: to
            };
        });
        CodeMirror.commands.autocomplete = CodeMirror.showHint;
        var defaultOptions = {
            hint: CodeMirror.hint.auto,
            completeSingle: true,
            alignWithWord: true,
            closeCharacters: /[\s()\[\]{};:>,]/,
            closeOnPick: true,
            closeOnUnfocus: true,
            updateOnCursorActivity: true,
            completeOnSingleClick: true,
            container: null,
            customKeys: null,
            extraKeys: null,
            paddingForScrollbar: true,
            moveOnOverlap: true
        };
        CodeMirror.defineOption("hintOptions", null);
    });
})();
var showHintExports = showHint.exports;
getDefaultExportFromCjs(showHintExports);

var vueCodemirror = {exports: {}};

(function (module, exports) {
    !(function (e, t) {
        module.exports = t(requireCodemirror()) ;
    })(commonjsGlobal, function (e) {
        return (function (e) {
            function t(r) {
                if (n[r]) return n[r].exports;
                var o = n[r] = {
                    i: r,
                    l: !1,
                    exports: {}
                };
                return (e[r].call(o.exports, o, o.exports, t), o.l = !0, o.exports);
            }
            var n = {};
            return (t.m = e, t.c = n, t.i = function (e) {
                return e;
            }, t.d = function (e, n, r) {
                t.o(e, n) || Object.defineProperty(e, n, {
                    configurable: !1,
                    enumerable: !0,
                    get: r
                });
            }, t.n = function (e) {
                var n = e && e.__esModule ? function () {
                    return e.default;
                } : function () {
                    return e;
                };
                return (t.d(n, "a", n), n);
            }, t.o = function (e, t) {
                return Object.prototype.hasOwnProperty.call(e, t);
            }, t.p = "/", t(t.s = 3));
        })([function (t, n) {
            t.exports = e;
        }, function (e, t, n) {
            Object.defineProperty(t, "__esModule", {
                value: !0
            });
            var r = n(0), o = (function (e) {
                return e && e.__esModule ? e : {
                    default: e
                };
            })(r), i = window.CodeMirror || o.default;
            ("function" != typeof Object.assign && Object.defineProperty(Object, "assign", {
                value: function (e, t) {
                    if (null == e) throw new TypeError("Cannot convert undefined or null to object");
                    for (var n = Object(e), r = 1; r < arguments.length; r++) {
                        var o = arguments[r];
                        if (null != o) for (var i in o) Object.prototype.hasOwnProperty.call(o, i) && (n[i] = o[i]);
                    }
                    return n;
                },
                writable: !0,
                configurable: !0
            }), t.default = {
                name: "codemirror",
                data: function () {
                    return {
                        content: "",
                        codemirror: null,
                        cminstance: null
                    };
                },
                props: {
                    code: String,
                    value: String,
                    marker: Function,
                    unseenLines: Array,
                    name: {
                        type: String,
                        default: "codemirror"
                    },
                    placeholder: {
                        type: String,
                        default: ""
                    },
                    merge: {
                        type: Boolean,
                        default: !1
                    },
                    options: {
                        type: Object,
                        default: function () {
                            return {};
                        }
                    },
                    events: {
                        type: Array,
                        default: function () {
                            return [];
                        }
                    },
                    globalOptions: {
                        type: Object,
                        default: function () {
                            return {};
                        }
                    },
                    globalEvents: {
                        type: Array,
                        default: function () {
                            return [];
                        }
                    }
                },
                watch: {
                    options: {
                        deep: !0,
                        handler: function (e) {
                            for (var t in e) this.cminstance.setOption(t, e[t]);
                        }
                    },
                    merge: function () {
                        this.$nextTick(this.switchMerge);
                    },
                    code: function (e) {
                        this.handerCodeChange(e);
                    },
                    value: function (e) {
                        this.handerCodeChange(e);
                    }
                },
                methods: {
                    initialize: function () {
                        var e = this, t = Object.assign({}, this.globalOptions, this.options);
                        (this.merge ? (this.codemirror = i.MergeView(this.$refs.mergeview, t), this.cminstance = this.codemirror.edit) : (this.codemirror = i.fromTextArea(this.$refs.textarea, t), this.cminstance = this.codemirror, this.cminstance.setValue(this.code || this.value || this.content)), this.cminstance.on("change", function (t) {
                            (e.content = t.getValue(), e.$emit && e.$emit("input", e.content));
                        }));
                        var n = {};
                        ["scroll", "changes", "beforeChange", "cursorActivity", "keyHandled", "inputRead", "electricInput", "beforeSelectionChange", "viewportChange", "swapDoc", "gutterClick", "gutterContextMenu", "focus", "blur", "refresh", "optionChange", "scrollCursorIntoView", "update"].concat(this.events).concat(this.globalEvents).filter(function (e) {
                            return !n[e] && (n[e] = !0);
                        }).forEach(function (t) {
                            e.cminstance.on(t, function () {
                                for (var n = arguments.length, r = Array(n), o = 0; o < n; o++) r[o] = arguments[o];
                                e.$emit.apply(e, [t].concat(r));
                                var i = t.replace(/([A-Z])/g, "-$1").toLowerCase();
                                i !== t && e.$emit.apply(e, [i].concat(r));
                            });
                        });
                        (this.$emit("ready", this.codemirror), this.unseenLineMarkers(), this.refresh());
                    },
                    refresh: function () {
                        var e = this;
                        this.$nextTick(function () {
                            e.cminstance.refresh();
                        });
                    },
                    destroy: function () {
                        var e = this.cminstance.doc.cm.getWrapperElement();
                        e && e.remove && e.remove();
                    },
                    handerCodeChange: function (e) {
                        if (e !== this.cminstance.getValue()) {
                            var t = this.cminstance.getScrollInfo();
                            (this.cminstance.setValue(e), this.content = e, this.cminstance.scrollTo(t.left, t.top));
                        }
                        this.unseenLineMarkers();
                    },
                    unseenLineMarkers: function () {
                        var e = this;
                        void 0 !== this.unseenLines && void 0 !== this.marker && this.unseenLines.forEach(function (t) {
                            var n = e.cminstance.lineInfo(t);
                            e.cminstance.setGutterMarker(t, "breakpoints", n.gutterMarkers ? null : e.marker());
                        });
                    },
                    switchMerge: function () {
                        var e = this.cminstance.doc.history, t = this.cminstance.doc.cleanGeneration;
                        (this.options.value = this.cminstance.getValue(), this.destroy(), this.initialize(), this.cminstance.doc.history = e, this.cminstance.doc.cleanGeneration = t);
                    }
                },
                mounted: function () {
                    this.initialize();
                },
                beforeDestroy: function () {
                    this.destroy();
                }
            });
        }, function (e, t, n) {
            Object.defineProperty(t, "__esModule", {
                value: !0
            });
            var r = n(1), o = n.n(r);
            for (var i in r) ["default", "default"].indexOf(i) < 0 && (function (e) {
                n.d(t, e, function () {
                    return r[e];
                });
            })(i);
            var s = n(5), c = n(4), a = c(o.a, s.a, !1, null, null, null);
            t.default = a.exports;
        }, function (e, t, n) {
            function r(e) {
                return e && e.__esModule ? e : {
                    default: e
                };
            }
            (Object.defineProperty(t, "__esModule", {
                value: !0
            }), t.install = t.codemirror = t.CodeMirror = void 0);
            var o = n(0), i = r(o), s = n(2), c = r(s), a = window.CodeMirror || i.default, u = function (e, t) {
                (t && (t.options && (c.default.props.globalOptions.default = function () {
                    return t.options;
                }), t.events && (c.default.props.globalEvents.default = function () {
                    return t.events;
                })), e.component(c.default.name, c.default));
            }, l = {
                CodeMirror: a,
                codemirror: c.default,
                install: u
            };
            (t.default = l, t.CodeMirror = a, t.codemirror = c.default, t.install = u);
        }, function (e, t) {
            e.exports = function (e, t, n, r, o, i) {
                var s, c = e = e || ({}), a = typeof e.default;
                "object" !== a && "function" !== a || (s = e, c = e.default);
                var u = "function" == typeof c ? c.options : c;
                (t && (u.render = t.render, u.staticRenderFns = t.staticRenderFns, u._compiled = !0), n && (u.functional = !0), o && (u._scopeId = o));
                var l;
                if ((i ? (l = function (e) {
                    (e = e || this.$vnode && this.$vnode.ssrContext || this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext, e || "undefined" == typeof __VUE_SSR_CONTEXT__ || (e = __VUE_SSR_CONTEXT__), r && r.call(this, e), e && e._registeredComponents && e._registeredComponents.add(i));
                }, u._ssrRegister = l) : r && (l = r), l)) {
                    var f = u.functional, d = f ? u.render : u.beforeCreate;
                    f ? (u._injectStyles = l, u.render = function (e, t) {
                        return (l.call(t), d(e, t));
                    }) : u.beforeCreate = d ? [].concat(d, l) : [l];
                }
                return {
                    esModule: s,
                    exports: c,
                    options: u
                };
            };
        }, function (e, t, n) {
            var r = function () {
                var e = this, t = e.$createElement, n = e._self._c || t;
                return n("div", {
                    staticClass: "vue-codemirror",
                    class: {
                        merge: e.merge
                    }
                }, [e.merge ? n("div", {
                    ref: "mergeview"
                }) : n("textarea", {
                    ref: "textarea",
                    attrs: {
                        name: e.name,
                        placeholder: e.placeholder
                    }
                })]);
            }, o = [], i = {
                render: r,
                staticRenderFns: o
            };
            t.a = i;
        }]);
    });
})(vueCodemirror);
var vueCodemirrorExports = vueCodemirror.exports;
getDefaultExportFromCjs(vueCodemirrorExports);

var uncurryThis$d = functionUncurryThis;
var toIntegerOrInfinity$1 = toIntegerOrInfinity$4;
var toString$6 = toString$8;
var requireObjectCoercible$3 = requireObjectCoercible$7;
var charAt$2 = uncurryThis$d(('').charAt);
var charCodeAt$1 = uncurryThis$d(('').charCodeAt);
var stringSlice$1 = uncurryThis$d(('').slice);
var createMethod$1 = function (CONVERT_TO_STRING) {
    return function ($this, pos) {
        var S = toString$6(requireObjectCoercible$3($this));
        var position = toIntegerOrInfinity$1(pos);
        var size = S.length;
        var first, second;
        if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
        first = charCodeAt$1(S, position);
        return first < 0xD800 || first > 0xDBFF || position + 1 === size || (second = charCodeAt$1(S, position + 1)) < 0xDC00 || second > 0xDFFF ? CONVERT_TO_STRING ? charAt$2(S, position) : first : CONVERT_TO_STRING ? stringSlice$1(S, position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
    };
};
var stringMultibyte = {
    codeAt: createMethod$1(false),
    charAt: createMethod$1(true)
};
getDefaultExportFromCjs(stringMultibyte);

var globalThis$5 = globalThis_1;
var isCallable$4 = isCallable$f;
var WeakMap$1 = globalThis$5.WeakMap;
var weakMapBasicDetection = isCallable$4(WeakMap$1) && (/native code/).test(String(WeakMap$1));
getDefaultExportFromCjs(weakMapBasicDetection);

var shared$5 = shared$7;
var uid$1 = uid$3;
var keys$3 = shared$5('keys');
var sharedKey$4 = function (key) {
    return keys$3[key] || (keys$3[key] = uid$1(key));
};
getDefaultExportFromCjs(sharedKey$4);

var hiddenKeys$5 = {};
getDefaultExportFromCjs(hiddenKeys$5);

var NATIVE_WEAK_MAP = weakMapBasicDetection;
var globalThis$4 = globalThis_1;
var isObject$7 = isObject$e;
var createNonEnumerableProperty$2 = createNonEnumerableProperty$4;
var hasOwn$9 = hasOwnProperty_1;
var shared$4 = sharedStoreExports;
var sharedKey$3 = sharedKey$4;
var hiddenKeys$4 = hiddenKeys$5;
var OBJECT_ALREADY_INITIALIZED = 'Object already initialized';
var TypeError$2 = globalThis$4.TypeError;
var WeakMap = globalThis$4.WeakMap;
var set, get, has;
var enforce = function (it) {
    return has(it) ? get(it) : set(it, {});
};
var getterFor = function (TYPE) {
    return function (it) {
        var state;
        if (!isObject$7(it) || (state = get(it)).type !== TYPE) {
            throw new TypeError$2('Incompatible receiver, ' + TYPE + ' required');
        }
        return state;
    };
};
if (NATIVE_WEAK_MAP || shared$4.state) {
    var store = shared$4.state || (shared$4.state = new WeakMap());
    store.get = store.get;
    store.has = store.has;
    store.set = store.set;
    set = function (it, metadata) {
        if (store.has(it)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        store.set(it, metadata);
        return metadata;
    };
    get = function (it) {
        return store.get(it) || ({});
    };
    has = function (it) {
        return store.has(it);
    };
} else {
    var STATE = sharedKey$3('state');
    hiddenKeys$4[STATE] = true;
    set = function (it, metadata) {
        if (hasOwn$9(it, STATE)) throw new TypeError$2(OBJECT_ALREADY_INITIALIZED);
        metadata.facade = it;
        createNonEnumerableProperty$2(it, STATE, metadata);
        return metadata;
    };
    get = function (it) {
        return hasOwn$9(it, STATE) ? it[STATE] : {};
    };
    has = function (it) {
        return hasOwn$9(it, STATE);
    };
}
var internalState = {
    set: set,
    get: get,
    has: has,
    enforce: enforce,
    getterFor: getterFor
};
getDefaultExportFromCjs(internalState);

var DESCRIPTORS$7 = descriptors;
var hasOwn$8 = hasOwnProperty_1;
var FunctionPrototype$2 = Function.prototype;
var getDescriptor = DESCRIPTORS$7 && Object.getOwnPropertyDescriptor;
var EXISTS = hasOwn$8(FunctionPrototype$2, 'name');
var PROPER = EXISTS && (function something() {}).name === 'something';
var CONFIGURABLE = EXISTS && (!DESCRIPTORS$7 || DESCRIPTORS$7 && getDescriptor(FunctionPrototype$2, 'name').configurable);
var functionName = {
    EXISTS: EXISTS,
    PROPER: PROPER,
    CONFIGURABLE: CONFIGURABLE
};
getDefaultExportFromCjs(functionName);

var objectDefineProperties = {};

var uncurryThis$c = functionUncurryThis;
var hasOwn$7 = hasOwnProperty_1;
var toIndexedObject$7 = toIndexedObject$a;
var indexOf$4 = arrayIncludes.indexOf;
var hiddenKeys$3 = hiddenKeys$5;
var push$3 = uncurryThis$c([].push);
var objectKeysInternal = function (object, names) {
    var O = toIndexedObject$7(object);
    var i = 0;
    var result = [];
    var key;
    for (key in O) !hasOwn$7(hiddenKeys$3, key) && hasOwn$7(O, key) && push$3(result, key);
    while (names.length > i) if (hasOwn$7(O, key = names[i++])) {
        ~indexOf$4(result, key) || push$3(result, key);
    }
    return result;
};
getDefaultExportFromCjs(objectKeysInternal);

var enumBugKeys$3 = ['constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf'];
getDefaultExportFromCjs(enumBugKeys$3);

var internalObjectKeys$1 = objectKeysInternal;
var enumBugKeys$2 = enumBugKeys$3;
var objectKeys$2 = Object.keys || (function keys(O) {
    return internalObjectKeys$1(O, enumBugKeys$2);
});
getDefaultExportFromCjs(objectKeys$2);

var DESCRIPTORS$6 = descriptors;
var V8_PROTOTYPE_DEFINE_BUG = v8PrototypeDefineBug;
var definePropertyModule$2 = objectDefineProperty;
var anObject$7 = anObject$9;
var toIndexedObject$6 = toIndexedObject$a;
var objectKeys$1 = objectKeys$2;
objectDefineProperties.f = DESCRIPTORS$6 && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {
    anObject$7(O);
    var props = toIndexedObject$6(Properties);
    var keys = objectKeys$1(Properties);
    var length = keys.length;
    var index = 0;
    var key;
    while (length > index) definePropertyModule$2.f(O, key = keys[index++], props[key]);
    return O;
};

var getBuiltIn$8 = getBuiltIn$b;
var html$1 = getBuiltIn$8('document', 'documentElement');
getDefaultExportFromCjs(html$1);

var anObject$6 = anObject$9;
var definePropertiesModule$1 = objectDefineProperties;
var enumBugKeys$1 = enumBugKeys$3;
var hiddenKeys$2 = hiddenKeys$5;
var html = html$1;
var documentCreateElement = documentCreateElement$1;
var sharedKey$2 = sharedKey$4;
var GT = '>';
var LT = '<';
var PROTOTYPE$1 = 'prototype';
var SCRIPT = 'script';
var IE_PROTO$1 = sharedKey$2('IE_PROTO');
var EmptyConstructor = function () {};
var scriptTag = function (content) {
    return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;
};
var NullProtoObjectViaActiveX = function (activeXDocument) {
    activeXDocument.write(scriptTag(''));
    activeXDocument.close();
    var temp = activeXDocument.parentWindow.Object;
    activeXDocument = null;
    return temp;
};
var NullProtoObjectViaIFrame = function () {
    var iframe = documentCreateElement('iframe');
    var JS = 'java' + SCRIPT + ':';
    var iframeDocument;
    iframe.style.display = 'none';
    html.appendChild(iframe);
    iframe.src = String(JS);
    iframeDocument = iframe.contentWindow.document;
    iframeDocument.open();
    iframeDocument.write(scriptTag('document.F=Object'));
    iframeDocument.close();
    return iframeDocument.F;
};
var activeXDocument;
var NullProtoObject = function () {
    try {
        activeXDocument = new ActiveXObject('htmlfile');
    } catch (error) {}
    NullProtoObject = typeof document != 'undefined' ? document.domain && activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame() : NullProtoObjectViaActiveX(activeXDocument);
    var length = enumBugKeys$1.length;
    while (length--) delete NullProtoObject[PROTOTYPE$1][enumBugKeys$1[length]];
    return NullProtoObject();
};
hiddenKeys$2[IE_PROTO$1] = true;
var objectCreate = Object.create || (function create(O, Properties) {
    var result;
    if (O !== null) {
        EmptyConstructor[PROTOTYPE$1] = anObject$6(O);
        result = new EmptyConstructor();
        EmptyConstructor[PROTOTYPE$1] = null;
        result[IE_PROTO$1] = O;
    } else result = NullProtoObject();
    return Properties === undefined ? result : definePropertiesModule$1.f(result, Properties);
});
getDefaultExportFromCjs(objectCreate);

var fails$c = fails$n;
var correctPrototypeGetter = !fails$c(function () {
    function F() {}
    F.prototype.constructor = null;
    return Object.getPrototypeOf(new F()) !== F.prototype;
});
getDefaultExportFromCjs(correctPrototypeGetter);

var hasOwn$6 = hasOwnProperty_1;
var isCallable$3 = isCallable$f;
var toObject$7 = toObject$a;
var sharedKey$1 = sharedKey$4;
var CORRECT_PROTOTYPE_GETTER$1 = correctPrototypeGetter;
var IE_PROTO = sharedKey$1('IE_PROTO');
var $Object = Object;
var ObjectPrototype$2 = $Object.prototype;
var objectGetPrototypeOf = CORRECT_PROTOTYPE_GETTER$1 ? $Object.getPrototypeOf : function (O) {
    var object = toObject$7(O);
    if (hasOwn$6(object, IE_PROTO)) return object[IE_PROTO];
    var constructor = object.constructor;
    if (isCallable$3(constructor) && object instanceof constructor) {
        return constructor.prototype;
    }
    return object instanceof $Object ? ObjectPrototype$2 : null;
};
getDefaultExportFromCjs(objectGetPrototypeOf);

var createNonEnumerableProperty$1 = createNonEnumerableProperty$4;
var defineBuiltIn$4 = function (target, key, value, options) {
    if (options && options.enumerable) target[key] = value; else createNonEnumerableProperty$1(target, key, value);
    return target;
};
getDefaultExportFromCjs(defineBuiltIn$4);

var fails$b = fails$n;
var isCallable$2 = isCallable$f;
var isObject$6 = isObject$e;
var create$8 = objectCreate;
var getPrototypeOf$6 = objectGetPrototypeOf;
var defineBuiltIn$3 = defineBuiltIn$4;
var wellKnownSymbol$d = wellKnownSymbol$k;
var ITERATOR$4 = wellKnownSymbol$d('iterator');
var BUGGY_SAFARI_ITERATORS$1 = false;
var IteratorPrototype$1, PrototypeOfArrayIteratorPrototype, arrayIterator;
if ([].keys) {
    arrayIterator = [].keys();
    if (!(('next' in arrayIterator))) BUGGY_SAFARI_ITERATORS$1 = true; else {
        PrototypeOfArrayIteratorPrototype = getPrototypeOf$6(getPrototypeOf$6(arrayIterator));
        if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype$1 = PrototypeOfArrayIteratorPrototype;
    }
}
var NEW_ITERATOR_PROTOTYPE = !isObject$6(IteratorPrototype$1) || fails$b(function () {
    var test = {};
    return IteratorPrototype$1[ITERATOR$4].call(test) !== test;
});
if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype$1 = {}; else IteratorPrototype$1 = create$8(IteratorPrototype$1);
if (!isCallable$2(IteratorPrototype$1[ITERATOR$4])) {
    defineBuiltIn$3(IteratorPrototype$1, ITERATOR$4, function () {
        return this;
    });
}
var iteratorsCore = {
    IteratorPrototype: IteratorPrototype$1,
    BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS$1
};
getDefaultExportFromCjs(iteratorsCore);

var TO_STRING_TAG_SUPPORT$1 = toStringTagSupport;
var classof$4 = classof$b;
var objectToString = TO_STRING_TAG_SUPPORT$1 ? ({}).toString : function toString() {
    return '[object ' + classof$4(this) + ']';
};
getDefaultExportFromCjs(objectToString);

var TO_STRING_TAG_SUPPORT = toStringTagSupport;
var defineProperty$a = objectDefineProperty.f;
var createNonEnumerableProperty = createNonEnumerableProperty$4;
var hasOwn$5 = hasOwnProperty_1;
var toString$5 = objectToString;
var wellKnownSymbol$c = wellKnownSymbol$k;
var TO_STRING_TAG = wellKnownSymbol$c('toStringTag');
var setToStringTag$6 = function (it, TAG, STATIC, SET_METHOD) {
    var target = STATIC ? it : it && it.prototype;
    if (target) {
        if (!hasOwn$5(target, TO_STRING_TAG)) {
            defineProperty$a(target, TO_STRING_TAG, {
                configurable: true,
                value: TAG
            });
        }
        if (SET_METHOD && !TO_STRING_TAG_SUPPORT) {
            createNonEnumerableProperty(target, 'toString', toString$5);
        }
    }
};
getDefaultExportFromCjs(setToStringTag$6);

var iterators = {};
getDefaultExportFromCjs(iterators);

var IteratorPrototype = iteratorsCore.IteratorPrototype;
var create$7 = objectCreate;
var createPropertyDescriptor$2 = createPropertyDescriptor$5;
var setToStringTag$5 = setToStringTag$6;
var Iterators$5 = iterators;
var returnThis$1 = function () {
    return this;
};
var iteratorCreateConstructor = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {
    var TO_STRING_TAG = NAME + ' Iterator';
    IteratorConstructor.prototype = create$7(IteratorPrototype, {
        next: createPropertyDescriptor$2(+!ENUMERABLE_NEXT, next)
    });
    setToStringTag$5(IteratorConstructor, TO_STRING_TAG, false, true);
    Iterators$5[TO_STRING_TAG] = returnThis$1;
    return IteratorConstructor;
};
getDefaultExportFromCjs(iteratorCreateConstructor);

var uncurryThis$b = functionUncurryThis;
var aCallable$3 = aCallable$6;
var functionUncurryThisAccessor = function (object, key, method) {
    try {
        return uncurryThis$b(aCallable$3(Object.getOwnPropertyDescriptor(object, key)[method]));
    } catch (error) {}
};
getDefaultExportFromCjs(functionUncurryThisAccessor);

var isObject$5 = isObject$e;
var isPossiblePrototype$1 = function (argument) {
    return isObject$5(argument) || argument === null;
};
getDefaultExportFromCjs(isPossiblePrototype$1);

var isPossiblePrototype = isPossiblePrototype$1;
var $String$1 = String;
var $TypeError$3 = TypeError;
var aPossiblePrototype$1 = function (argument) {
    if (isPossiblePrototype(argument)) return argument;
    throw new $TypeError$3("Can't set " + $String$1(argument) + ' as a prototype');
};
getDefaultExportFromCjs(aPossiblePrototype$1);

var uncurryThisAccessor = functionUncurryThisAccessor;
var isObject$4 = isObject$e;
var requireObjectCoercible$2 = requireObjectCoercible$7;
var aPossiblePrototype = aPossiblePrototype$1;
var objectSetPrototypeOf = Object.setPrototypeOf || (('__proto__' in ({})) ? (function () {
    var CORRECT_SETTER = false;
    var test = {};
    var setter;
    try {
        setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');
        setter(test, []);
        CORRECT_SETTER = test instanceof Array;
    } catch (error) {}
    return function setPrototypeOf(O, proto) {
        requireObjectCoercible$2(O);
        aPossiblePrototype(proto);
        if (!isObject$4(O)) return O;
        if (CORRECT_SETTER) setter(O, proto); else O.__proto__ = proto;
        return O;
    };
})() : undefined);
getDefaultExportFromCjs(objectSetPrototypeOf);

var $$r = _export;
var call$7 = functionCall;
var FunctionName = functionName;
var createIteratorConstructor = iteratorCreateConstructor;
var getPrototypeOf$5 = objectGetPrototypeOf;
var setToStringTag$4 = setToStringTag$6;
var defineBuiltIn$2 = defineBuiltIn$4;
var wellKnownSymbol$b = wellKnownSymbol$k;
var Iterators$4 = iterators;
var IteratorsCore = iteratorsCore;
var PROPER_FUNCTION_NAME = FunctionName.PROPER;
FunctionName.CONFIGURABLE;
IteratorsCore.IteratorPrototype;
var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;
var ITERATOR$3 = wellKnownSymbol$b('iterator');
var KEYS = 'keys';
var VALUES = 'values';
var ENTRIES = 'entries';
var returnThis = function () {
    return this;
};
var iteratorDefine = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
    createIteratorConstructor(IteratorConstructor, NAME, next);
    var getIterationMethod = function (KIND) {
        if (KIND === DEFAULT && defaultIterator) return defaultIterator;
        if (!BUGGY_SAFARI_ITERATORS && KIND && (KIND in IterablePrototype)) return IterablePrototype[KIND];
        switch (KIND) {
            case KEYS:
                return function keys() {
                    return new IteratorConstructor(this, KIND);
                };
            case VALUES:
                return function values() {
                    return new IteratorConstructor(this, KIND);
                };
            case ENTRIES:
                return function entries() {
                    return new IteratorConstructor(this, KIND);
                };
        }
        return function () {
            return new IteratorConstructor(this);
        };
    };
    var TO_STRING_TAG = NAME + ' Iterator';
    var INCORRECT_VALUES_NAME = false;
    var IterablePrototype = Iterable.prototype;
    var nativeIterator = IterablePrototype[ITERATOR$3] || IterablePrototype['@@iterator'] || DEFAULT && IterablePrototype[DEFAULT];
    var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);
    var anyNativeIterator = NAME === 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
    var CurrentIteratorPrototype, methods, KEY;
    if (anyNativeIterator) {
        CurrentIteratorPrototype = getPrototypeOf$5(anyNativeIterator.call(new Iterable()));
        if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {
            setToStringTag$4(CurrentIteratorPrototype, TO_STRING_TAG, true, true);
            Iterators$4[TO_STRING_TAG] = returnThis;
        }
    }
    if (PROPER_FUNCTION_NAME && DEFAULT === VALUES && nativeIterator && nativeIterator.name !== VALUES) {
        {
            INCORRECT_VALUES_NAME = true;
            defaultIterator = function values() {
                return call$7(nativeIterator, this);
            };
        }
    }
    if (DEFAULT) {
        methods = {
            values: getIterationMethod(VALUES),
            keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
            entries: getIterationMethod(ENTRIES)
        };
        if (FORCED) for (KEY in methods) {
            if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !((KEY in IterablePrototype))) {
                defineBuiltIn$2(IterablePrototype, KEY, methods[KEY]);
            }
        } else $$r({
            target: NAME,
            proto: true,
            forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME
        }, methods);
    }
    if ((FORCED) && IterablePrototype[ITERATOR$3] !== defaultIterator) {
        defineBuiltIn$2(IterablePrototype, ITERATOR$3, defaultIterator, {
            name: DEFAULT
        });
    }
    Iterators$4[NAME] = defaultIterator;
    return methods;
};
getDefaultExportFromCjs(iteratorDefine);

var createIterResultObject$2 = function (value, done) {
    return {
        value: value,
        done: done
    };
};
getDefaultExportFromCjs(createIterResultObject$2);

var charAt$1 = stringMultibyte.charAt;
var toString$4 = toString$8;
var InternalStateModule$2 = internalState;
var defineIterator$1 = iteratorDefine;
var createIterResultObject$1 = createIterResultObject$2;
var STRING_ITERATOR = 'String Iterator';
var setInternalState$2 = InternalStateModule$2.set;
var getInternalState$2 = InternalStateModule$2.getterFor(STRING_ITERATOR);
defineIterator$1(String, 'String', function (iterated) {
    setInternalState$2(this, {
        type: STRING_ITERATOR,
        string: toString$4(iterated),
        index: 0
    });
}, function next() {
    var state = getInternalState$2(this);
    var string = state.string;
    var index = state.index;
    var point;
    if (index >= string.length) return createIterResultObject$1(undefined, true);
    point = charAt$1(string, index);
    state.index += point.length;
    return createIterResultObject$1(point, false);
});

var call$6 = functionCall;
var anObject$5 = anObject$9;
var getMethod$1 = getMethod$3;
var iteratorClose$1 = function (iterator, kind, value) {
    var innerResult, innerError;
    anObject$5(iterator);
    try {
        innerResult = getMethod$1(iterator, 'return');
        if (!innerResult) {
            if (kind === 'throw') throw value;
            return value;
        }
        innerResult = call$6(innerResult, iterator);
    } catch (error) {
        innerError = true;
        innerResult = error;
    }
    if (kind === 'throw') throw value;
    if (innerError) throw innerResult;
    anObject$5(innerResult);
    return value;
};
getDefaultExportFromCjs(iteratorClose$1);

var anObject$4 = anObject$9;
var iteratorClose = iteratorClose$1;
var callWithSafeIterationClosing$1 = function (iterator, fn, value, ENTRIES) {
    try {
        return ENTRIES ? fn(anObject$4(value)[0], value[1]) : fn(value);
    } catch (error) {
        iteratorClose(iterator, 'throw', error);
    }
};
getDefaultExportFromCjs(callWithSafeIterationClosing$1);

var wellKnownSymbol$a = wellKnownSymbol$k;
var Iterators$3 = iterators;
var ITERATOR$2 = wellKnownSymbol$a('iterator');
var ArrayPrototype$7 = Array.prototype;
var isArrayIteratorMethod$1 = function (it) {
    return it !== undefined && (Iterators$3.Array === it || ArrayPrototype$7[ITERATOR$2] === it);
};
getDefaultExportFromCjs(isArrayIteratorMethod$1);

var DESCRIPTORS$5 = descriptors;
var definePropertyModule$1 = objectDefineProperty;
var createPropertyDescriptor$1 = createPropertyDescriptor$5;
var createProperty$4 = function (object, key, value) {
    if (DESCRIPTORS$5) definePropertyModule$1.f(object, key, createPropertyDescriptor$1(0, value)); else object[key] = value;
};
getDefaultExportFromCjs(createProperty$4);

var classof$3 = classof$b;
var getMethod = getMethod$3;
var isNullOrUndefined = isNullOrUndefined$3;
var Iterators$2 = iterators;
var wellKnownSymbol$9 = wellKnownSymbol$k;
var ITERATOR$1 = wellKnownSymbol$9('iterator');
var getIteratorMethod$8 = function (it) {
    if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR$1) || getMethod(it, '@@iterator') || Iterators$2[classof$3(it)];
};
getDefaultExportFromCjs(getIteratorMethod$8);

var call$5 = functionCall;
var aCallable$2 = aCallable$6;
var anObject$3 = anObject$9;
var tryToString$2 = tryToString$4;
var getIteratorMethod$7 = getIteratorMethod$8;
var $TypeError$2 = TypeError;
var getIterator$1 = function (argument, usingIterator) {
    var iteratorMethod = arguments.length < 2 ? getIteratorMethod$7(argument) : usingIterator;
    if (aCallable$2(iteratorMethod)) return anObject$3(call$5(iteratorMethod, argument));
    throw new $TypeError$2(tryToString$2(argument) + ' is not iterable');
};
getDefaultExportFromCjs(getIterator$1);

var bind$9 = functionBindContext;
var call$4 = functionCall;
var toObject$6 = toObject$a;
var callWithSafeIterationClosing = callWithSafeIterationClosing$1;
var isArrayIteratorMethod = isArrayIteratorMethod$1;
var isConstructor$2 = isConstructor$4;
var lengthOfArrayLike$4 = lengthOfArrayLike$7;
var createProperty$3 = createProperty$4;
var getIterator = getIterator$1;
var getIteratorMethod$6 = getIteratorMethod$8;
var $Array$1 = Array;
var arrayFrom = function from(arrayLike) {
    var O = toObject$6(arrayLike);
    var IS_CONSTRUCTOR = isConstructor$2(this);
    var argumentsLength = arguments.length;
    var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
    var mapping = mapfn !== undefined;
    if (mapping) mapfn = bind$9(mapfn, argumentsLength > 2 ? arguments[2] : undefined);
    var iteratorMethod = getIteratorMethod$6(O);
    var index = 0;
    var length, result, step, iterator, next, value;
    if (iteratorMethod && !(this === $Array$1 && isArrayIteratorMethod(iteratorMethod))) {
        result = IS_CONSTRUCTOR ? new this() : [];
        iterator = getIterator(O, iteratorMethod);
        next = iterator.next;
        for (; !(step = call$4(next, iterator)).done; index++) {
            value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;
            createProperty$3(result, index, value);
        }
    } else {
        length = lengthOfArrayLike$4(O);
        result = IS_CONSTRUCTOR ? new this(length) : $Array$1(length);
        for (; length > index; index++) {
            value = mapping ? mapfn(O[index], index) : O[index];
            createProperty$3(result, index, value);
        }
    }
    result.length = index;
    return result;
};
getDefaultExportFromCjs(arrayFrom);

var wellKnownSymbol$8 = wellKnownSymbol$k;
var ITERATOR = wellKnownSymbol$8('iterator');
var SAFE_CLOSING = false;
try {
    var called = 0;
    var iteratorWithReturn = {
        next: function () {
            return {
                done: !!called++
            };
        },
        'return': function () {
            SAFE_CLOSING = true;
        }
    };
    iteratorWithReturn[ITERATOR] = function () {
        return this;
    };
    Array.from(iteratorWithReturn, function () {
        throw 2;
    });
} catch (error) {}
var checkCorrectnessOfIteration$1 = function (exec, SKIP_CLOSING) {
    try {
        if (!SKIP_CLOSING && !SAFE_CLOSING) return false;
    } catch (error) {
        return false;
    }
    var ITERATION_SUPPORT = false;
    try {
        var object = {};
        object[ITERATOR] = function () {
            return {
                next: function () {
                    return {
                        done: ITERATION_SUPPORT = true
                    };
                }
            };
        };
        exec(object);
    } catch (error) {}
    return ITERATION_SUPPORT;
};
getDefaultExportFromCjs(checkCorrectnessOfIteration$1);

var $$q = _export;
var from$3 = arrayFrom;
var checkCorrectnessOfIteration = checkCorrectnessOfIteration$1;
var INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {
    Array.from(iterable);
});
$$q({
    target: 'Array',
    stat: true,
    forced: INCORRECT_ITERATION
}, {
    from: from$3
});

var path$c = path$g;
var from$2 = path$c.Array.from;
getDefaultExportFromCjs(from$2);

var parent$E = from$2;
var from$1 = parent$E;
getDefaultExportFromCjs(from$1);

var from = from$1;
var _Array$from = getDefaultExportFromCjs(from);

var $TypeError$1 = TypeError;
var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
var doesNotExceedSafeInteger$2 = function (it) {
    if (it > MAX_SAFE_INTEGER) throw $TypeError$1('Maximum allowed index exceeded');
    return it;
};
getDefaultExportFromCjs(doesNotExceedSafeInteger$2);

var fails$a = fails$n;
var wellKnownSymbol$7 = wellKnownSymbol$k;
var V8_VERSION$1 = environmentV8Version;
var SPECIES$1 = wellKnownSymbol$7('species');
var arrayMethodHasSpeciesSupport$4 = function (METHOD_NAME) {
    return V8_VERSION$1 >= 51 || !fails$a(function () {
        var array = [];
        var constructor = array.constructor = {};
        constructor[SPECIES$1] = function () {
            return {
                foo: 1
            };
        };
        return array[METHOD_NAME](Boolean).foo !== 1;
    });
};
getDefaultExportFromCjs(arrayMethodHasSpeciesSupport$4);

var $$p = _export;
var fails$9 = fails$n;
var isArray$3 = isArray$5;
var isObject$3 = isObject$e;
var toObject$5 = toObject$a;
var lengthOfArrayLike$3 = lengthOfArrayLike$7;
var doesNotExceedSafeInteger$1 = doesNotExceedSafeInteger$2;
var createProperty$2 = createProperty$4;
var arraySpeciesCreate$1 = arraySpeciesCreate$3;
var arrayMethodHasSpeciesSupport$3 = arrayMethodHasSpeciesSupport$4;
var wellKnownSymbol$6 = wellKnownSymbol$k;
var V8_VERSION = environmentV8Version;
var IS_CONCAT_SPREADABLE = wellKnownSymbol$6('isConcatSpreadable');
var IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails$9(function () {
    var array = [];
    array[IS_CONCAT_SPREADABLE] = false;
    return array.concat()[0] !== array;
});
var isConcatSpreadable = function (O) {
    if (!isObject$3(O)) return false;
    var spreadable = O[IS_CONCAT_SPREADABLE];
    return spreadable !== undefined ? !!spreadable : isArray$3(O);
};
var FORCED$5 = !IS_CONCAT_SPREADABLE_SUPPORT || !arrayMethodHasSpeciesSupport$3('concat');
$$p({
    target: 'Array',
    proto: true,
    arity: 1,
    forced: FORCED$5
}, {
    concat: function concat(arg) {
        var O = toObject$5(this);
        var A = arraySpeciesCreate$1(O, 0);
        var n = 0;
        var i, k, length, len, E;
        for ((i = -1, length = arguments.length); i < length; i++) {
            E = i === -1 ? O : arguments[i];
            if (isConcatSpreadable(E)) {
                len = lengthOfArrayLike$3(E);
                doesNotExceedSafeInteger$1(n + len);
                for (k = 0; k < len; (k++, n++)) if ((k in E)) createProperty$2(A, n, E[k]);
            } else {
                doesNotExceedSafeInteger$1(n + 1);
                createProperty$2(A, n++, E);
            }
        }
        A.length = n;
        return A;
    }
});

var objectGetOwnPropertyNames = {};

var internalObjectKeys = objectKeysInternal;
var enumBugKeys = enumBugKeys$3;
var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');
objectGetOwnPropertyNames.f = Object.getOwnPropertyNames || (function getOwnPropertyNames(O) {
    return internalObjectKeys(O, hiddenKeys$1);
});

var objectGetOwnPropertyNamesExternal = {};

var uncurryThis$a = functionUncurryThis;
var arraySlice$3 = uncurryThis$a([].slice);
getDefaultExportFromCjs(arraySlice$3);

var classof$2 = classofRaw$2;
var toIndexedObject$5 = toIndexedObject$a;
var $getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
var arraySlice$2 = arraySlice$3;
var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : [];
var getWindowNames = function (it) {
    try {
        return $getOwnPropertyNames$1(it);
    } catch (error) {
        return arraySlice$2(windowNames);
    }
};
objectGetOwnPropertyNamesExternal.f = function getOwnPropertyNames(it) {
    return windowNames && classof$2(it) === 'Window' ? getWindowNames(it) : $getOwnPropertyNames$1(toIndexedObject$5(it));
};

var objectGetOwnPropertySymbols = {};

objectGetOwnPropertySymbols.f = Object.getOwnPropertySymbols;

var defineProperty$9 = objectDefineProperty;
var defineBuiltInAccessor$1 = function (target, name, descriptor) {
    return defineProperty$9.f(target, name, descriptor);
};
getDefaultExportFromCjs(defineBuiltInAccessor$1);

var wellKnownSymbolWrapped = {};

var wellKnownSymbol$5 = wellKnownSymbol$k;
wellKnownSymbolWrapped.f = wellKnownSymbol$5;

var path$b = path$g;
var hasOwn$4 = hasOwnProperty_1;
var wrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
var defineProperty$8 = objectDefineProperty.f;
var wellKnownSymbolDefine = function (NAME) {
    var Symbol = path$b.Symbol || (path$b.Symbol = {});
    if (!hasOwn$4(Symbol, NAME)) defineProperty$8(Symbol, NAME, {
        value: wrappedWellKnownSymbolModule$1.f(NAME)
    });
};
getDefaultExportFromCjs(wellKnownSymbolDefine);

var call$3 = functionCall;
var getBuiltIn$7 = getBuiltIn$b;
var wellKnownSymbol$4 = wellKnownSymbol$k;
var defineBuiltIn$1 = defineBuiltIn$4;
var symbolDefineToPrimitive = function () {
    var Symbol = getBuiltIn$7('Symbol');
    var SymbolPrototype = Symbol && Symbol.prototype;
    var valueOf = SymbolPrototype && SymbolPrototype.valueOf;
    var TO_PRIMITIVE = wellKnownSymbol$4('toPrimitive');
    if (SymbolPrototype && !SymbolPrototype[TO_PRIMITIVE]) {
        defineBuiltIn$1(SymbolPrototype, TO_PRIMITIVE, function (hint) {
            return call$3(valueOf, this);
        }, {
            arity: 1
        });
    }
};
getDefaultExportFromCjs(symbolDefineToPrimitive);

var $$o = _export;
var globalThis$3 = globalThis_1;
var call$2 = functionCall;
var uncurryThis$9 = functionUncurryThis;
var DESCRIPTORS$4 = descriptors;
var NATIVE_SYMBOL$3 = symbolConstructorDetection;
var fails$8 = fails$n;
var hasOwn$3 = hasOwnProperty_1;
var isPrototypeOf$8 = objectIsPrototypeOf;
var anObject$2 = anObject$9;
var toIndexedObject$4 = toIndexedObject$a;
var toPropertyKey$1 = toPropertyKey$4;
var $toString = toString$8;
var createPropertyDescriptor = createPropertyDescriptor$5;
var nativeObjectCreate = objectCreate;
var objectKeys = objectKeys$2;
var getOwnPropertyNamesModule$1 = objectGetOwnPropertyNames;
var getOwnPropertyNamesExternal = objectGetOwnPropertyNamesExternal;
var getOwnPropertySymbolsModule$2 = objectGetOwnPropertySymbols;
var getOwnPropertyDescriptorModule$1 = objectGetOwnPropertyDescriptor;
var definePropertyModule = objectDefineProperty;
var definePropertiesModule = objectDefineProperties;
var propertyIsEnumerableModule = objectPropertyIsEnumerable;
var defineBuiltIn = defineBuiltIn$4;
var defineBuiltInAccessor = defineBuiltInAccessor$1;
var shared$3 = shared$7;
var sharedKey = sharedKey$4;
var hiddenKeys = hiddenKeys$5;
var uid = uid$3;
var wellKnownSymbol$3 = wellKnownSymbol$k;
var wrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
var defineWellKnownSymbol$m = wellKnownSymbolDefine;
var defineSymbolToPrimitive$1 = symbolDefineToPrimitive;
var setToStringTag$3 = setToStringTag$6;
var InternalStateModule$1 = internalState;
var $forEach = arrayIteration.forEach;
var HIDDEN = sharedKey('hidden');
var SYMBOL = 'Symbol';
var PROTOTYPE = 'prototype';
var setInternalState$1 = InternalStateModule$1.set;
var getInternalState$1 = InternalStateModule$1.getterFor(SYMBOL);
var ObjectPrototype$1 = Object[PROTOTYPE];
var $Symbol = globalThis$3.Symbol;
var SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];
var RangeError$1 = globalThis$3.RangeError;
var TypeError$1 = globalThis$3.TypeError;
var QObject = globalThis$3.QObject;
var nativeGetOwnPropertyDescriptor$1 = getOwnPropertyDescriptorModule$1.f;
var nativeDefineProperty = definePropertyModule.f;
var nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;
var nativePropertyIsEnumerable = propertyIsEnumerableModule.f;
var push$2 = uncurryThis$9([].push);
var AllSymbols = shared$3('symbols');
var ObjectPrototypeSymbols = shared$3('op-symbols');
var WellKnownSymbolsStore$1 = shared$3('wks');
var USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
var fallbackDefineProperty = function (O, P, Attributes) {
    var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype$1, P);
    if (ObjectPrototypeDescriptor) delete ObjectPrototype$1[P];
    nativeDefineProperty(O, P, Attributes);
    if (ObjectPrototypeDescriptor && O !== ObjectPrototype$1) {
        nativeDefineProperty(ObjectPrototype$1, P, ObjectPrototypeDescriptor);
    }
};
var setSymbolDescriptor = DESCRIPTORS$4 && fails$8(function () {
    return nativeObjectCreate(nativeDefineProperty({}, 'a', {
        get: function () {
            return nativeDefineProperty(this, 'a', {
                value: 7
            }).a;
        }
    })).a !== 7;
}) ? fallbackDefineProperty : nativeDefineProperty;
var wrap = function (tag, description) {
    var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);
    setInternalState$1(symbol, {
        type: SYMBOL,
        tag: tag,
        description: description
    });
    if (!DESCRIPTORS$4) symbol.description = description;
    return symbol;
};
var $defineProperty = function defineProperty(O, P, Attributes) {
    if (O === ObjectPrototype$1) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
    anObject$2(O);
    var key = toPropertyKey$1(P);
    anObject$2(Attributes);
    if (hasOwn$3(AllSymbols, key)) {
        if (!Attributes.enumerable) {
            if (!hasOwn$3(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, nativeObjectCreate(null)));
            O[HIDDEN][key] = true;
        } else {
            if (hasOwn$3(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;
            Attributes = nativeObjectCreate(Attributes, {
                enumerable: createPropertyDescriptor(0, false)
            });
        }
        return setSymbolDescriptor(O, key, Attributes);
    }
    return nativeDefineProperty(O, key, Attributes);
};
var $defineProperties = function defineProperties(O, Properties) {
    anObject$2(O);
    var properties = toIndexedObject$4(Properties);
    var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));
    $forEach(keys, function (key) {
        if (!DESCRIPTORS$4 || call$2($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);
    });
    return O;
};
var $create = function create(O, Properties) {
    return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);
};
var $propertyIsEnumerable = function propertyIsEnumerable(V) {
    var P = toPropertyKey$1(V);
    var enumerable = call$2(nativePropertyIsEnumerable, this, P);
    if (this === ObjectPrototype$1 && hasOwn$3(AllSymbols, P) && !hasOwn$3(ObjectPrototypeSymbols, P)) return false;
    return enumerable || !hasOwn$3(this, P) || !hasOwn$3(AllSymbols, P) || hasOwn$3(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
    var it = toIndexedObject$4(O);
    var key = toPropertyKey$1(P);
    if (it === ObjectPrototype$1 && hasOwn$3(AllSymbols, key) && !hasOwn$3(ObjectPrototypeSymbols, key)) return;
    var descriptor = nativeGetOwnPropertyDescriptor$1(it, key);
    if (descriptor && hasOwn$3(AllSymbols, key) && !(hasOwn$3(it, HIDDEN) && it[HIDDEN][key])) {
        descriptor.enumerable = true;
    }
    return descriptor;
};
var $getOwnPropertyNames = function getOwnPropertyNames(O) {
    var names = nativeGetOwnPropertyNames(toIndexedObject$4(O));
    var result = [];
    $forEach(names, function (key) {
        if (!hasOwn$3(AllSymbols, key) && !hasOwn$3(hiddenKeys, key)) push$2(result, key);
    });
    return result;
};
var $getOwnPropertySymbols = function (O) {
    var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$1;
    var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject$4(O));
    var result = [];
    $forEach(names, function (key) {
        if (hasOwn$3(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn$3(ObjectPrototype$1, key))) {
            push$2(result, AllSymbols[key]);
        }
    });
    return result;
};
if (!NATIVE_SYMBOL$3) {
    $Symbol = function Symbol() {
        if (isPrototypeOf$8(SymbolPrototype, this)) throw new TypeError$1('Symbol is not a constructor');
        var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);
        var tag = uid(description);
        var setter = function (value) {
            var $this = this === undefined ? globalThis$3 : this;
            if ($this === ObjectPrototype$1) call$2(setter, ObjectPrototypeSymbols, value);
            if (hasOwn$3($this, HIDDEN) && hasOwn$3($this[HIDDEN], tag)) $this[HIDDEN][tag] = false;
            var descriptor = createPropertyDescriptor(1, value);
            try {
                setSymbolDescriptor($this, tag, descriptor);
            } catch (error) {
                if (!(error instanceof RangeError$1)) throw error;
                fallbackDefineProperty($this, tag, descriptor);
            }
        };
        if (DESCRIPTORS$4 && USE_SETTER) setSymbolDescriptor(ObjectPrototype$1, tag, {
            configurable: true,
            set: setter
        });
        return wrap(tag, description);
    };
    SymbolPrototype = $Symbol[PROTOTYPE];
    defineBuiltIn(SymbolPrototype, 'toString', function toString() {
        return getInternalState$1(this).tag;
    });
    defineBuiltIn($Symbol, 'withoutSetter', function (description) {
        return wrap(uid(description), description);
    });
    propertyIsEnumerableModule.f = $propertyIsEnumerable;
    definePropertyModule.f = $defineProperty;
    definePropertiesModule.f = $defineProperties;
    getOwnPropertyDescriptorModule$1.f = $getOwnPropertyDescriptor;
    getOwnPropertyNamesModule$1.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;
    getOwnPropertySymbolsModule$2.f = $getOwnPropertySymbols;
    wrappedWellKnownSymbolModule.f = function (name) {
        return wrap(wellKnownSymbol$3(name), name);
    };
    if (DESCRIPTORS$4) {
        defineBuiltInAccessor(SymbolPrototype, 'description', {
            configurable: true,
            get: function description() {
                return getInternalState$1(this).description;
            }
        });
    }
}
$$o({
    global: true,
    constructor: true,
    wrap: true,
    forced: !NATIVE_SYMBOL$3,
    sham: !NATIVE_SYMBOL$3
}, {
    Symbol: $Symbol
});
$forEach(objectKeys(WellKnownSymbolsStore$1), function (name) {
    defineWellKnownSymbol$m(name);
});
$$o({
    target: SYMBOL,
    stat: true,
    forced: !NATIVE_SYMBOL$3
}, {
    useSetter: function () {
        USE_SETTER = true;
    },
    useSimple: function () {
        USE_SETTER = false;
    }
});
$$o({
    target: 'Object',
    stat: true,
    forced: !NATIVE_SYMBOL$3,
    sham: !DESCRIPTORS$4
}, {
    create: $create,
    defineProperty: $defineProperty,
    defineProperties: $defineProperties,
    getOwnPropertyDescriptor: $getOwnPropertyDescriptor
});
$$o({
    target: 'Object',
    stat: true,
    forced: !NATIVE_SYMBOL$3
}, {
    getOwnPropertyNames: $getOwnPropertyNames
});
defineSymbolToPrimitive$1();
setToStringTag$3($Symbol, SYMBOL);
hiddenKeys[HIDDEN] = true;

var NATIVE_SYMBOL$2 = symbolConstructorDetection;
var symbolRegistryDetection = NATIVE_SYMBOL$2 && !!Symbol['for'] && !!Symbol.keyFor;
getDefaultExportFromCjs(symbolRegistryDetection);

var $$n = _export;
var getBuiltIn$6 = getBuiltIn$b;
var hasOwn$2 = hasOwnProperty_1;
var toString$3 = toString$8;
var shared$2 = shared$7;
var NATIVE_SYMBOL_REGISTRY$1 = symbolRegistryDetection;
var StringToSymbolRegistry = shared$2('string-to-symbol-registry');
var SymbolToStringRegistry$1 = shared$2('symbol-to-string-registry');
$$n({
    target: 'Symbol',
    stat: true,
    forced: !NATIVE_SYMBOL_REGISTRY$1
}, {
    'for': function (key) {
        var string = toString$3(key);
        if (hasOwn$2(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
        var symbol = getBuiltIn$6('Symbol')(string);
        StringToSymbolRegistry[string] = symbol;
        SymbolToStringRegistry$1[symbol] = string;
        return symbol;
    }
});

var $$m = _export;
var hasOwn$1 = hasOwnProperty_1;
var isSymbol$2 = isSymbol$5;
var tryToString$1 = tryToString$4;
var shared$1 = shared$7;
var NATIVE_SYMBOL_REGISTRY = symbolRegistryDetection;
var SymbolToStringRegistry = shared$1('symbol-to-string-registry');
$$m({
    target: 'Symbol',
    stat: true,
    forced: !NATIVE_SYMBOL_REGISTRY
}, {
    keyFor: function keyFor(sym) {
        if (!isSymbol$2(sym)) throw new TypeError(tryToString$1(sym) + ' is not a symbol');
        if (hasOwn$1(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
    }
});

var uncurryThis$8 = functionUncurryThis;
var isArray$2 = isArray$5;
var isCallable$1 = isCallable$f;
var classof$1 = classofRaw$2;
var toString$2 = toString$8;
var push$1 = uncurryThis$8([].push);
var getJsonReplacerFunction = function (replacer) {
    if (isCallable$1(replacer)) return replacer;
    if (!isArray$2(replacer)) return;
    var rawLength = replacer.length;
    var keys = [];
    for (var i = 0; i < rawLength; i++) {
        var element = replacer[i];
        if (typeof element == 'string') push$1(keys, element); else if (typeof element == 'number' || classof$1(element) === 'Number' || classof$1(element) === 'String') push$1(keys, toString$2(element));
    }
    var keysLength = keys.length;
    var root = true;
    return function (key, value) {
        if (root) {
            root = false;
            return value;
        }
        if (isArray$2(this)) return value;
        for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;
    };
};
getDefaultExportFromCjs(getJsonReplacerFunction);

var $$l = _export;
var getBuiltIn$5 = getBuiltIn$b;
var apply$2 = functionApply;
var call$1 = functionCall;
var uncurryThis$7 = functionUncurryThis;
var fails$7 = fails$n;
var isCallable = isCallable$f;
var isSymbol$1 = isSymbol$5;
var arraySlice$1 = arraySlice$3;
var getReplacerFunction = getJsonReplacerFunction;
var NATIVE_SYMBOL$1 = symbolConstructorDetection;
var $String = String;
var $stringify = getBuiltIn$5('JSON', 'stringify');
var exec = uncurryThis$7((/./).exec);
var charAt = uncurryThis$7(('').charAt);
var charCodeAt = uncurryThis$7(('').charCodeAt);
var replace = uncurryThis$7(('').replace);
var numberToString = uncurryThis$7((1.0).toString);
var tester = /[\uD800-\uDFFF]/g;
var low = /^[\uD800-\uDBFF]$/;
var hi = /^[\uDC00-\uDFFF]$/;
var WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL$1 || fails$7(function () {
    var symbol = getBuiltIn$5('Symbol')('stringify detection');
    return $stringify([symbol]) !== '[null]' || $stringify({
        a: symbol
    }) !== '{}' || $stringify(Object(symbol)) !== '{}';
});
var ILL_FORMED_UNICODE = fails$7(function () {
    return $stringify('\uDF06\uD834') !== '"\\udf06\\ud834"' || $stringify('\uDEAD') !== '"\\udead"';
});
var stringifyWithSymbolsFix = function (it, replacer) {
    var args = arraySlice$1(arguments);
    var $replacer = getReplacerFunction(replacer);
    if (!isCallable($replacer) && (it === undefined || isSymbol$1(it))) return;
    args[1] = function (key, value) {
        if (isCallable($replacer)) value = call$1($replacer, this, $String(key), value);
        if (!isSymbol$1(value)) return value;
    };
    return apply$2($stringify, null, args);
};
var fixIllFormed = function (match, offset, string) {
    var prev = charAt(string, offset - 1);
    var next = charAt(string, offset + 1);
    if (exec(low, match) && !exec(hi, next) || exec(hi, match) && !exec(low, prev)) {
        return '\\u' + numberToString(charCodeAt(match, 0), 16);
    }
    return match;
};
if ($stringify) {
    $$l({
        target: 'JSON',
        stat: true,
        arity: 3,
        forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE
    }, {
        stringify: function stringify(it, replacer, space) {
            var args = arraySlice$1(arguments);
            var result = apply$2(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);
            return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;
        }
    });
}

var $$k = _export;
var NATIVE_SYMBOL = symbolConstructorDetection;
var fails$6 = fails$n;
var getOwnPropertySymbolsModule$1 = objectGetOwnPropertySymbols;
var toObject$4 = toObject$a;
var FORCED$4 = !NATIVE_SYMBOL || fails$6(function () {
    getOwnPropertySymbolsModule$1.f(1);
});
$$k({
    target: 'Object',
    stat: true,
    forced: FORCED$4
}, {
    getOwnPropertySymbols: function getOwnPropertySymbols(it) {
        var $getOwnPropertySymbols = getOwnPropertySymbolsModule$1.f;
        return $getOwnPropertySymbols ? $getOwnPropertySymbols(toObject$4(it)) : [];
    }
});

var defineWellKnownSymbol$l = wellKnownSymbolDefine;
defineWellKnownSymbol$l('asyncIterator');

var defineWellKnownSymbol$k = wellKnownSymbolDefine;
defineWellKnownSymbol$k('hasInstance');

var defineWellKnownSymbol$j = wellKnownSymbolDefine;
defineWellKnownSymbol$j('isConcatSpreadable');

var defineWellKnownSymbol$i = wellKnownSymbolDefine;
defineWellKnownSymbol$i('iterator');

var defineWellKnownSymbol$h = wellKnownSymbolDefine;
defineWellKnownSymbol$h('match');

var defineWellKnownSymbol$g = wellKnownSymbolDefine;
defineWellKnownSymbol$g('matchAll');

var defineWellKnownSymbol$f = wellKnownSymbolDefine;
defineWellKnownSymbol$f('replace');

var defineWellKnownSymbol$e = wellKnownSymbolDefine;
defineWellKnownSymbol$e('search');

var defineWellKnownSymbol$d = wellKnownSymbolDefine;
defineWellKnownSymbol$d('species');

var defineWellKnownSymbol$c = wellKnownSymbolDefine;
defineWellKnownSymbol$c('split');

var defineWellKnownSymbol$b = wellKnownSymbolDefine;
var defineSymbolToPrimitive = symbolDefineToPrimitive;
defineWellKnownSymbol$b('toPrimitive');
defineSymbolToPrimitive();

var getBuiltIn$4 = getBuiltIn$b;
var defineWellKnownSymbol$a = wellKnownSymbolDefine;
var setToStringTag$2 = setToStringTag$6;
defineWellKnownSymbol$a('toStringTag');
setToStringTag$2(getBuiltIn$4('Symbol'), 'Symbol');

var defineWellKnownSymbol$9 = wellKnownSymbolDefine;
defineWellKnownSymbol$9('unscopables');

var globalThis$2 = globalThis_1;
var setToStringTag$1 = setToStringTag$6;
setToStringTag$1(globalThis$2.JSON, 'JSON', true);

var path$a = path$g;
var symbol$5 = path$a.Symbol;
getDefaultExportFromCjs(symbol$5);

var toIndexedObject$3 = toIndexedObject$a;
var Iterators$1 = iterators;
var InternalStateModule = internalState;
objectDefineProperty.f;
var defineIterator = iteratorDefine;
var createIterResultObject = createIterResultObject$2;
var ARRAY_ITERATOR = 'Array Iterator';
var setInternalState = InternalStateModule.set;
var getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);
var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) {
    setInternalState(this, {
        type: ARRAY_ITERATOR,
        target: toIndexedObject$3(iterated),
        index: 0,
        kind: kind
    });
}, function () {
    var state = getInternalState(this);
    var target = state.target;
    var index = state.index++;
    if (!target || index >= target.length) {
        state.target = null;
        return createIterResultObject(undefined, true);
    }
    switch (state.kind) {
        case 'keys':
            return createIterResultObject(index, false);
        case 'values':
            return createIterResultObject(target[index], false);
    }
    return createIterResultObject([index, target[index]], false);
}, 'values');
Iterators$1.Arguments = Iterators$1.Array;
getDefaultExportFromCjs(es_array_iterator);

var domIterables = {
    CSSRuleList: 0,
    CSSStyleDeclaration: 0,
    CSSValueList: 0,
    ClientRectList: 0,
    DOMRectList: 0,
    DOMStringList: 0,
    DOMTokenList: 1,
    DataTransferItemList: 0,
    FileList: 0,
    HTMLAllCollection: 0,
    HTMLCollection: 0,
    HTMLFormElement: 0,
    HTMLSelectElement: 0,
    MediaList: 0,
    MimeTypeArray: 0,
    NamedNodeMap: 0,
    NodeList: 1,
    PaintRequestList: 0,
    Plugin: 0,
    PluginArray: 0,
    SVGLengthList: 0,
    SVGNumberList: 0,
    SVGPathSegList: 0,
    SVGPointList: 0,
    SVGStringList: 0,
    SVGTransformList: 0,
    SourceBufferList: 0,
    StyleSheetList: 0,
    TextTrackCueList: 0,
    TextTrackList: 0,
    TouchList: 0
};
getDefaultExportFromCjs(domIterables);

var DOMIterables = domIterables;
var globalThis$1 = globalThis_1;
var setToStringTag = setToStringTag$6;
var Iterators = iterators;
for (var COLLECTION_NAME in DOMIterables) {
    setToStringTag(globalThis$1[COLLECTION_NAME], COLLECTION_NAME);
    Iterators[COLLECTION_NAME] = Iterators.Array;
}

var parent$D = symbol$5;
var symbol$4 = parent$D;
getDefaultExportFromCjs(symbol$4);

var symbol$3 = symbol$4;
var _Symbol$1 = getDefaultExportFromCjs(symbol$3);

var getIteratorMethod$5 = getIteratorMethod$8;
var getIteratorMethod_1 = getIteratorMethod$5;
getDefaultExportFromCjs(getIteratorMethod_1);

var parent$C = getIteratorMethod_1;
var getIteratorMethod$4 = parent$C;
getDefaultExportFromCjs(getIteratorMethod$4);

var parent$B = getIteratorMethod$4;
var getIteratorMethod$3 = parent$B;
getDefaultExportFromCjs(getIteratorMethod$3);

var parent$A = getIteratorMethod$3;
var getIteratorMethod$2 = parent$A;
getDefaultExportFromCjs(getIteratorMethod$2);

var getIteratorMethod$1 = getIteratorMethod$2;
getDefaultExportFromCjs(getIteratorMethod$1);

var getIteratorMethod = getIteratorMethod$1;
var _getIteratorMethod = getDefaultExportFromCjs(getIteratorMethod);

var path$9 = path$g;
var getOwnPropertySymbols$2 = path$9.Object.getOwnPropertySymbols;
getDefaultExportFromCjs(getOwnPropertySymbols$2);

var parent$z = getOwnPropertySymbols$2;
var getOwnPropertySymbols$1 = parent$z;
getDefaultExportFromCjs(getOwnPropertySymbols$1);

var getOwnPropertySymbols = getOwnPropertySymbols$1;
var _Object$getOwnPropertySymbols = getDefaultExportFromCjs(getOwnPropertySymbols);

var getOwnPropertyDescriptor$3 = {exports: {}};

var $$j = _export;
var fails$5 = fails$n;
var toIndexedObject$2 = toIndexedObject$a;
var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
var DESCRIPTORS$3 = descriptors;
var FORCED$3 = !DESCRIPTORS$3 || fails$5(function () {
    nativeGetOwnPropertyDescriptor(1);
});
$$j({
    target: 'Object',
    stat: true,
    forced: FORCED$3,
    sham: !DESCRIPTORS$3
}, {
    getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
        return nativeGetOwnPropertyDescriptor(toIndexedObject$2(it), key);
    }
});

var path$8 = path$g;
var Object$3 = path$8.Object;
var getOwnPropertyDescriptor$2 = getOwnPropertyDescriptor$3.exports = function getOwnPropertyDescriptor(it, key) {
    return Object$3.getOwnPropertyDescriptor(it, key);
};
if (Object$3.getOwnPropertyDescriptor.sham) getOwnPropertyDescriptor$2.sham = true;
var getOwnPropertyDescriptorExports = getOwnPropertyDescriptor$3.exports;
getDefaultExportFromCjs(getOwnPropertyDescriptorExports);

var parent$y = getOwnPropertyDescriptorExports;
var getOwnPropertyDescriptor$1 = parent$y;
getDefaultExportFromCjs(getOwnPropertyDescriptor$1);

var getOwnPropertyDescriptor = getOwnPropertyDescriptor$1;
var _Object$getOwnPropertyDescriptor = getDefaultExportFromCjs(getOwnPropertyDescriptor);

var getBuiltIn$3 = getBuiltIn$b;
var uncurryThis$6 = functionUncurryThis;
var getOwnPropertyNamesModule = objectGetOwnPropertyNames;
var getOwnPropertySymbolsModule = objectGetOwnPropertySymbols;
var anObject$1 = anObject$9;
var concat$5 = uncurryThis$6([].concat);
var ownKeys$2 = getBuiltIn$3('Reflect', 'ownKeys') || (function ownKeys(it) {
    var keys = getOwnPropertyNamesModule.f(anObject$1(it));
    var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
    return getOwnPropertySymbols ? concat$5(keys, getOwnPropertySymbols(it)) : keys;
});
getDefaultExportFromCjs(ownKeys$2);

var $$i = _export;
var DESCRIPTORS$2 = descriptors;
var ownKeys$1 = ownKeys$2;
var toIndexedObject$1 = toIndexedObject$a;
var getOwnPropertyDescriptorModule = objectGetOwnPropertyDescriptor;
var createProperty$1 = createProperty$4;
$$i({
    target: 'Object',
    stat: true,
    sham: !DESCRIPTORS$2
}, {
    getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {
        var O = toIndexedObject$1(object);
        var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;
        var keys = ownKeys$1(O);
        var result = {};
        var index = 0;
        var key, descriptor;
        while (keys.length > index) {
            descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);
            if (descriptor !== undefined) createProperty$1(result, key, descriptor);
        }
        return result;
    }
});

var path$7 = path$g;
var getOwnPropertyDescriptors$2 = path$7.Object.getOwnPropertyDescriptors;
getDefaultExportFromCjs(getOwnPropertyDescriptors$2);

var parent$x = getOwnPropertyDescriptors$2;
var getOwnPropertyDescriptors$1 = parent$x;
getDefaultExportFromCjs(getOwnPropertyDescriptors$1);

var getOwnPropertyDescriptors = getOwnPropertyDescriptors$1;
var _Object$getOwnPropertyDescriptors = getDefaultExportFromCjs(getOwnPropertyDescriptors);

function _classCallCheck(a, n) {
    if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function");
}

var defineProperty$7 = {exports: {}};

var $$h = _export;
var DESCRIPTORS$1 = descriptors;
var defineProperty$6 = objectDefineProperty.f;
$$h({
    target: 'Object',
    stat: true,
    forced: Object.defineProperty !== defineProperty$6,
    sham: !DESCRIPTORS$1
}, {
    defineProperty: defineProperty$6
});

var path$6 = path$g;
var Object$2 = path$6.Object;
var defineProperty$5 = defineProperty$7.exports = function defineProperty(it, key, desc) {
    return Object$2.defineProperty(it, key, desc);
};
if (Object$2.defineProperty.sham) defineProperty$5.sham = true;
var definePropertyExports = defineProperty$7.exports;
getDefaultExportFromCjs(definePropertyExports);

var parent$w = definePropertyExports;
var defineProperty$4 = parent$w;
getDefaultExportFromCjs(defineProperty$4);

var parent$v = defineProperty$4;
var defineProperty$3 = parent$v;
getDefaultExportFromCjs(defineProperty$3);

var parent$u = defineProperty$3;
var defineProperty$2 = parent$u;
getDefaultExportFromCjs(defineProperty$2);

var defineProperty$1 = defineProperty$2;
var _Object$defineProperty = getDefaultExportFromCjs(defineProperty$1);

var wellKnownSymbol$2 = wellKnownSymbol$k;
var defineProperty = objectDefineProperty.f;
var METADATA = wellKnownSymbol$2('metadata');
var FunctionPrototype$1 = Function.prototype;
if (FunctionPrototype$1[METADATA] === undefined) {
    defineProperty(FunctionPrototype$1, METADATA, {
        value: null
    });
}

var defineWellKnownSymbol$8 = wellKnownSymbolDefine;
defineWellKnownSymbol$8('asyncDispose');

var defineWellKnownSymbol$7 = wellKnownSymbolDefine;
defineWellKnownSymbol$7('dispose');

var defineWellKnownSymbol$6 = wellKnownSymbolDefine;
defineWellKnownSymbol$6('metadata');

var parent$t = symbol$4;
var symbol$2 = parent$t;
getDefaultExportFromCjs(symbol$2);

var getBuiltIn$2 = getBuiltIn$b;
var uncurryThis$5 = functionUncurryThis;
var Symbol$2 = getBuiltIn$2('Symbol');
var keyFor = Symbol$2.keyFor;
var thisSymbolValue$1 = uncurryThis$5(Symbol$2.prototype.valueOf);
var symbolIsRegistered = Symbol$2.isRegisteredSymbol || (function isRegisteredSymbol(value) {
    try {
        return keyFor(thisSymbolValue$1(value)) !== undefined;
    } catch (error) {
        return false;
    }
});
getDefaultExportFromCjs(symbolIsRegistered);

var $$g = _export;
var isRegisteredSymbol$1 = symbolIsRegistered;
$$g({
    target: 'Symbol',
    stat: true
}, {
    isRegisteredSymbol: isRegisteredSymbol$1
});

var shared = shared$7;
var getBuiltIn$1 = getBuiltIn$b;
var uncurryThis$4 = functionUncurryThis;
var isSymbol = isSymbol$5;
var wellKnownSymbol$1 = wellKnownSymbol$k;
var Symbol$1 = getBuiltIn$1('Symbol');
var $isWellKnownSymbol = Symbol$1.isWellKnownSymbol;
var getOwnPropertyNames = getBuiltIn$1('Object', 'getOwnPropertyNames');
var thisSymbolValue = uncurryThis$4(Symbol$1.prototype.valueOf);
var WellKnownSymbolsStore = shared('wks');
for (var i = 0, symbolKeys = getOwnPropertyNames(Symbol$1), symbolKeysLength = symbolKeys.length; i < symbolKeysLength; i++) {
    try {
        var symbolKey = symbolKeys[i];
        if (isSymbol(Symbol$1[symbolKey])) wellKnownSymbol$1(symbolKey);
    } catch (error) {}
}
var symbolIsWellKnown = function isWellKnownSymbol(value) {
    if ($isWellKnownSymbol && $isWellKnownSymbol(value)) return true;
    try {
        var symbol = thisSymbolValue(value);
        for (var j = 0, keys = getOwnPropertyNames(WellKnownSymbolsStore), keysLength = keys.length; j < keysLength; j++) {
            if (WellKnownSymbolsStore[keys[j]] == symbol) return true;
        }
    } catch (error) {}
    return false;
};
getDefaultExportFromCjs(symbolIsWellKnown);

var $$f = _export;
var isWellKnownSymbol$1 = symbolIsWellKnown;
$$f({
    target: 'Symbol',
    stat: true,
    forced: true
}, {
    isWellKnownSymbol: isWellKnownSymbol$1
});

var defineWellKnownSymbol$5 = wellKnownSymbolDefine;
defineWellKnownSymbol$5('customMatcher');

var defineWellKnownSymbol$4 = wellKnownSymbolDefine;
defineWellKnownSymbol$4('observable');

var $$e = _export;
var isRegisteredSymbol = symbolIsRegistered;
$$e({
    target: 'Symbol',
    stat: true,
    name: 'isRegisteredSymbol'
}, {
    isRegistered: isRegisteredSymbol
});

var $$d = _export;
var isWellKnownSymbol = symbolIsWellKnown;
$$d({
    target: 'Symbol',
    stat: true,
    name: 'isWellKnownSymbol',
    forced: true
}, {
    isWellKnown: isWellKnownSymbol
});

var defineWellKnownSymbol$3 = wellKnownSymbolDefine;
defineWellKnownSymbol$3('matcher');

var defineWellKnownSymbol$2 = wellKnownSymbolDefine;
defineWellKnownSymbol$2('metadataKey');

var defineWellKnownSymbol$1 = wellKnownSymbolDefine;
defineWellKnownSymbol$1('patternMatch');

var defineWellKnownSymbol = wellKnownSymbolDefine;
defineWellKnownSymbol('replaceAll');

var parent$s = symbol$2;
var symbol$1 = parent$s;
getDefaultExportFromCjs(symbol$1);

var symbol = symbol$1;
var _Symbol = getDefaultExportFromCjs(symbol);

var WrappedWellKnownSymbolModule$1 = wellKnownSymbolWrapped;
var iterator$4 = WrappedWellKnownSymbolModule$1.f('iterator');
getDefaultExportFromCjs(iterator$4);

var parent$r = iterator$4;
var iterator$3 = parent$r;
getDefaultExportFromCjs(iterator$3);

var parent$q = iterator$3;
var iterator$2 = parent$q;
getDefaultExportFromCjs(iterator$2);

var parent$p = iterator$2;
var iterator$1 = parent$p;
getDefaultExportFromCjs(iterator$1);

var iterator = iterator$1;
var _Symbol$iterator = getDefaultExportFromCjs(iterator);

function _typeof(o) {
    "@babel/helpers - typeof";
    return (_typeof = "function" == typeof _Symbol && "symbol" == typeof _Symbol$iterator ? function (o) {
        return typeof o;
    } : function (o) {
        return o && "function" == typeof _Symbol && o.constructor === _Symbol && o !== _Symbol.prototype ? "symbol" : typeof o;
    }, _typeof(o));
}

var WrappedWellKnownSymbolModule = wellKnownSymbolWrapped;
var toPrimitive$6 = WrappedWellKnownSymbolModule.f('toPrimitive');
getDefaultExportFromCjs(toPrimitive$6);

var parent$o = toPrimitive$6;
var toPrimitive$5 = parent$o;
getDefaultExportFromCjs(toPrimitive$5);

var parent$n = toPrimitive$5;
var toPrimitive$4 = parent$n;
getDefaultExportFromCjs(toPrimitive$4);

var parent$m = toPrimitive$4;
var toPrimitive$3 = parent$m;
getDefaultExportFromCjs(toPrimitive$3);

var toPrimitive$2 = toPrimitive$3;
var _Symbol$toPrimitive = getDefaultExportFromCjs(toPrimitive$2);

function toPrimitive$1(t, r) {
    if ("object" != _typeof(t) || !t) return t;
    var e = t[_Symbol$toPrimitive];
    if (void 0 !== e) {
        var i = e.call(t, r || "default");
        if ("object" != _typeof(i)) return i;
        throw new TypeError("@@toPrimitive must return a primitive value.");
    }
    return ("string" === r ? String : Number)(t);
}

function toPropertyKey(t) {
    var i = toPrimitive$1(t, "string");
    return "symbol" == _typeof(i) ? i : i + "";
}

function _defineProperties(e, r) {
    for (var t = 0; t < r.length; t++) {
        var o = r[t];
        (o.enumerable = o.enumerable || !1, o.configurable = !0, ("value" in o) && (o.writable = !0), _Object$defineProperty(e, toPropertyKey(o.key), o));
    }
}
function _createClass(e, r, t) {
    return (r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), _Object$defineProperty(e, "prototype", {
        writable: !1
    }), e);
}

function _defineProperty(e, r, t) {
    return (((r = toPropertyKey(r)) in e) ? _Object$defineProperty(e, r, {
        value: t,
        enumerable: !0,
        configurable: !0,
        writable: !0
    }) : e[r] = t, e);
}

var isArray$1 = isArray$5;
var lengthOfArrayLike$2 = lengthOfArrayLike$7;
var doesNotExceedSafeInteger = doesNotExceedSafeInteger$2;
var bind$8 = functionBindContext;
var flattenIntoArray$1 = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {
    var targetIndex = start;
    var sourceIndex = 0;
    var mapFn = mapper ? bind$8(mapper, thisArg) : false;
    var element, elementLen;
    while (sourceIndex < sourceLen) {
        if ((sourceIndex in source)) {
            element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];
            if (depth > 0 && isArray$1(element)) {
                elementLen = lengthOfArrayLike$2(element);
                targetIndex = flattenIntoArray$1(target, original, element, elementLen, targetIndex, depth - 1) - 1;
            } else {
                doesNotExceedSafeInteger(targetIndex + 1);
                target[targetIndex] = element;
            }
            targetIndex++;
        }
        sourceIndex++;
    }
    return targetIndex;
};
var flattenIntoArray_1 = flattenIntoArray$1;
getDefaultExportFromCjs(flattenIntoArray_1);

var $$c = _export;
var flattenIntoArray = flattenIntoArray_1;
var aCallable$1 = aCallable$6;
var toObject$3 = toObject$a;
var lengthOfArrayLike$1 = lengthOfArrayLike$7;
var arraySpeciesCreate = arraySpeciesCreate$3;
$$c({
    target: 'Array',
    proto: true
}, {
    flatMap: function flatMap(callbackfn) {
        var O = toObject$3(this);
        var sourceLen = lengthOfArrayLike$1(O);
        var A;
        aCallable$1(callbackfn);
        A = arraySpeciesCreate(O, 0);
        A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
        return A;
    }
});

var getBuiltInPrototypeMethod$7 = getBuiltInPrototypeMethod$b;
var flatMap$3 = getBuiltInPrototypeMethod$7('Array', 'flatMap');
getDefaultExportFromCjs(flatMap$3);

var isPrototypeOf$7 = objectIsPrototypeOf;
var method$7 = flatMap$3;
var ArrayPrototype$6 = Array.prototype;
var flatMap$2 = function (it) {
    var own = it.flatMap;
    return it === ArrayPrototype$6 || isPrototypeOf$7(ArrayPrototype$6, it) && own === ArrayPrototype$6.flatMap ? method$7 : own;
};
getDefaultExportFromCjs(flatMap$2);

var parent$l = flatMap$2;
var flatMap$1 = parent$l;
getDefaultExportFromCjs(flatMap$1);

var flatMap = flatMap$1;
var _flatMapInstanceProperty = getDefaultExportFromCjs(flatMap);

var $$b = _export;
var toObject$2 = toObject$a;
var nativeKeys = objectKeys$2;
var fails$4 = fails$n;
var FAILS_ON_PRIMITIVES$1 = fails$4(function () {
    nativeKeys(1);
});
$$b({
    target: 'Object',
    stat: true,
    forced: FAILS_ON_PRIMITIVES$1
}, {
    keys: function keys(it) {
        return nativeKeys(toObject$2(it));
    }
});

var path$5 = path$g;
var keys$2 = path$5.Object.keys;
getDefaultExportFromCjs(keys$2);

var parent$k = keys$2;
var keys$1 = parent$k;
getDefaultExportFromCjs(keys$1);

var keys = keys$1;
var _Object$keys = getDefaultExportFromCjs(keys);

var getBuiltInPrototypeMethod$6 = getBuiltInPrototypeMethod$b;
var concat$4 = getBuiltInPrototypeMethod$6('Array', 'concat');
getDefaultExportFromCjs(concat$4);

var isPrototypeOf$6 = objectIsPrototypeOf;
var method$6 = concat$4;
var ArrayPrototype$5 = Array.prototype;
var concat$3 = function (it) {
    var own = it.concat;
    return it === ArrayPrototype$5 || isPrototypeOf$6(ArrayPrototype$5, it) && own === ArrayPrototype$5.concat ? method$6 : own;
};
getDefaultExportFromCjs(concat$3);

var parent$j = concat$3;
var concat$2 = parent$j;
getDefaultExportFromCjs(concat$2);

var concat$1 = concat$2;
var _concatInstanceProperty = getDefaultExportFromCjs(concat$1);

var $$a = _export;
var isArray = isArray$5;
var isConstructor$1 = isConstructor$4;
var isObject$2 = isObject$e;
var toAbsoluteIndex = toAbsoluteIndex$2;
var lengthOfArrayLike = lengthOfArrayLike$7;
var toIndexedObject = toIndexedObject$a;
var createProperty = createProperty$4;
var wellKnownSymbol = wellKnownSymbol$k;
var arrayMethodHasSpeciesSupport$2 = arrayMethodHasSpeciesSupport$4;
var nativeSlice = arraySlice$3;
var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport$2('slice');
var SPECIES = wellKnownSymbol('species');
var $Array = Array;
var max = Math.max;
$$a({
    target: 'Array',
    proto: true,
    forced: !HAS_SPECIES_SUPPORT$2
}, {
    slice: function slice(start, end) {
        var O = toIndexedObject(this);
        var length = lengthOfArrayLike(O);
        var k = toAbsoluteIndex(start, length);
        var fin = toAbsoluteIndex(end === undefined ? length : end, length);
        var Constructor, result, n;
        if (isArray(O)) {
            Constructor = O.constructor;
            if (isConstructor$1(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) {
                Constructor = undefined;
            } else if (isObject$2(Constructor)) {
                Constructor = Constructor[SPECIES];
                if (Constructor === null) Constructor = undefined;
            }
            if (Constructor === $Array || Constructor === undefined) {
                return nativeSlice(O, k, fin);
            }
        }
        result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0));
        for (n = 0; k < fin; (k++, n++)) if ((k in O)) createProperty(result, n, O[k]);
        result.length = n;
        return result;
    }
});

var getBuiltInPrototypeMethod$5 = getBuiltInPrototypeMethod$b;
var slice$3 = getBuiltInPrototypeMethod$5('Array', 'slice');
getDefaultExportFromCjs(slice$3);

var isPrototypeOf$5 = objectIsPrototypeOf;
var method$5 = slice$3;
var ArrayPrototype$4 = Array.prototype;
var slice$2 = function (it) {
    var own = it.slice;
    return it === ArrayPrototype$4 || isPrototypeOf$5(ArrayPrototype$4, it) && own === ArrayPrototype$4.slice ? method$5 : own;
};
getDefaultExportFromCjs(slice$2);

var parent$i = slice$2;
var slice$1 = parent$i;
getDefaultExportFromCjs(slice$1);

var slice = slice$1;
var _sliceInstanceProperty = getDefaultExportFromCjs(slice);

var $$9 = _export;
var $map = arrayIteration.map;
var arrayMethodHasSpeciesSupport$1 = arrayMethodHasSpeciesSupport$4;
var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport$1('map');
$$9({
    target: 'Array',
    proto: true,
    forced: !HAS_SPECIES_SUPPORT$1
}, {
    map: function map(callbackfn) {
        return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
    }
});

var getBuiltInPrototypeMethod$4 = getBuiltInPrototypeMethod$b;
var map$3 = getBuiltInPrototypeMethod$4('Array', 'map');
getDefaultExportFromCjs(map$3);

var isPrototypeOf$4 = objectIsPrototypeOf;
var method$4 = map$3;
var ArrayPrototype$3 = Array.prototype;
var map$2 = function (it) {
    var own = it.map;
    return it === ArrayPrototype$3 || isPrototypeOf$4(ArrayPrototype$3, it) && own === ArrayPrototype$3.map ? method$4 : own;
};
getDefaultExportFromCjs(map$2);

var parent$h = map$2;
var map$1 = parent$h;
getDefaultExportFromCjs(map$1);

var map = map$1;
var _mapInstanceProperty = getDefaultExportFromCjs(map);

var $$8 = _export;
var $filter = arrayIteration.filter;
var arrayMethodHasSpeciesSupport = arrayMethodHasSpeciesSupport$4;
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
$$8({
    target: 'Array',
    proto: true,
    forced: !HAS_SPECIES_SUPPORT
}, {
    filter: function filter(callbackfn) {
        return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
    }
});

var getBuiltInPrototypeMethod$3 = getBuiltInPrototypeMethod$b;
var filter$3 = getBuiltInPrototypeMethod$3('Array', 'filter');
getDefaultExportFromCjs(filter$3);

var isPrototypeOf$3 = objectIsPrototypeOf;
var method$3 = filter$3;
var ArrayPrototype$2 = Array.prototype;
var filter$2 = function (it) {
    var own = it.filter;
    return it === ArrayPrototype$2 || isPrototypeOf$3(ArrayPrototype$2, it) && own === ArrayPrototype$2.filter ? method$3 : own;
};
getDefaultExportFromCjs(filter$2);

var parent$g = filter$2;
var filter$1 = parent$g;
getDefaultExportFromCjs(filter$1);

var filter = filter$1;
var _filterInstanceProperty = getDefaultExportFromCjs(filter);

var $$7 = _export;
var $find = arrayIteration.find;
var FIND = 'find';
var SKIPS_HOLES = true;
if ((FIND in [])) Array(1)[FIND](function () {
    SKIPS_HOLES = false;
});
$$7({
    target: 'Array',
    proto: true,
    forced: SKIPS_HOLES
}, {
    find: function find(callbackfn) {
        return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
    }
});

var getBuiltInPrototypeMethod$2 = getBuiltInPrototypeMethod$b;
var find$3 = getBuiltInPrototypeMethod$2('Array', 'find');
getDefaultExportFromCjs(find$3);

var isPrototypeOf$2 = objectIsPrototypeOf;
var method$2 = find$3;
var ArrayPrototype$1 = Array.prototype;
var find$2 = function (it) {
    var own = it.find;
    return it === ArrayPrototype$1 || isPrototypeOf$2(ArrayPrototype$1, it) && own === ArrayPrototype$1.find ? method$2 : own;
};
getDefaultExportFromCjs(find$2);

var parent$f = find$2;
var find$1 = parent$f;
getDefaultExportFromCjs(find$1);

var find = find$1;
var _findInstanceProperty = getDefaultExportFromCjs(find);

var toIntegerOrInfinity = toIntegerOrInfinity$4;
var toString$1 = toString$8;
var requireObjectCoercible$1 = requireObjectCoercible$7;
var $RangeError$1 = RangeError;
var stringRepeat = function repeat(count) {
    var str = toString$1(requireObjectCoercible$1(this));
    var result = '';
    var n = toIntegerOrInfinity(count);
    if (n < 0 || n === Infinity) throw new $RangeError$1('Wrong number of repetitions');
    for (; n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
    return result;
};
getDefaultExportFromCjs(stringRepeat);

var uncurryThis$3 = functionUncurryThis;
var toLength = toLength$2;
var toString = toString$8;
var $repeat = stringRepeat;
var requireObjectCoercible = requireObjectCoercible$7;
var repeat = uncurryThis$3($repeat);
var stringSlice = uncurryThis$3(('').slice);
var ceil = Math.ceil;
var createMethod = function (IS_END) {
    return function ($this, maxLength, fillString) {
        var S = toString(requireObjectCoercible($this));
        var intMaxLength = toLength(maxLength);
        var stringLength = S.length;
        var fillStr = fillString === undefined ? ' ' : toString(fillString);
        var fillLen, stringFiller;
        if (intMaxLength <= stringLength || fillStr === '') return S;
        fillLen = intMaxLength - stringLength;
        stringFiller = repeat(fillStr, ceil(fillLen / fillStr.length));
        if (stringFiller.length > fillLen) stringFiller = stringSlice(stringFiller, 0, fillLen);
        return IS_END ? S + stringFiller : stringFiller + S;
    };
};
var stringPad = {
    start: createMethod(false),
    end: createMethod(true)
};
getDefaultExportFromCjs(stringPad);

var uncurryThis$2 = functionUncurryThis;
var fails$3 = fails$n;
var padStart = stringPad.start;
var $RangeError = RangeError;
var $isFinite = isFinite;
var abs = Math.abs;
var DatePrototype = Date.prototype;
var nativeDateToISOString = DatePrototype.toISOString;
var thisTimeValue = uncurryThis$2(DatePrototype.getTime);
var getUTCDate = uncurryThis$2(DatePrototype.getUTCDate);
var getUTCFullYear = uncurryThis$2(DatePrototype.getUTCFullYear);
var getUTCHours = uncurryThis$2(DatePrototype.getUTCHours);
var getUTCMilliseconds = uncurryThis$2(DatePrototype.getUTCMilliseconds);
var getUTCMinutes = uncurryThis$2(DatePrototype.getUTCMinutes);
var getUTCMonth = uncurryThis$2(DatePrototype.getUTCMonth);
var getUTCSeconds = uncurryThis$2(DatePrototype.getUTCSeconds);
var dateToIsoString = fails$3(function () {
    return nativeDateToISOString.call(new Date(-5e13 - 1)) !== '0385-07-25T07:06:39.999Z';
}) || !fails$3(function () {
    nativeDateToISOString.call(new Date(NaN));
}) ? function toISOString() {
    if (!$isFinite(thisTimeValue(this))) throw new $RangeError('Invalid time value');
    var date = this;
    var year = getUTCFullYear(date);
    var milliseconds = getUTCMilliseconds(date);
    var sign = year < 0 ? '-' : year > 9999 ? '+' : '';
    return sign + padStart(abs(year), sign ? 6 : 4, 0) + '-' + padStart(getUTCMonth(date) + 1, 2, 0) + '-' + padStart(getUTCDate(date), 2, 0) + 'T' + padStart(getUTCHours(date), 2, 0) + ':' + padStart(getUTCMinutes(date), 2, 0) + ':' + padStart(getUTCSeconds(date), 2, 0) + '.' + padStart(milliseconds, 3, 0) + 'Z';
} : nativeDateToISOString;
getDefaultExportFromCjs(dateToIsoString);

var $$6 = _export;
var call = functionCall;
var toObject$1 = toObject$a;
var toPrimitive = toPrimitive$8;
var toISOString = dateToIsoString;
var classof = classofRaw$2;
var fails$2 = fails$n;
var FORCED$2 = fails$2(function () {
    return new Date(NaN).toJSON() !== null || call(Date.prototype.toJSON, {
        toISOString: function () {
            return 1;
        }
    }) !== 1;
});
$$6({
    target: 'Date',
    proto: true,
    forced: FORCED$2
}, {
    toJSON: function toJSON(key) {
        var O = toObject$1(this);
        var pv = toPrimitive(O, 'number');
        return typeof pv == 'number' && !isFinite(pv) ? null : !(('toISOString' in O)) && classof(O) === 'Date' ? call(toISOString, O) : O.toISOString();
    }
});

var path$4 = path$g;
var apply$1 = functionApply;
if (!path$4.JSON) path$4.JSON = {
    stringify: JSON.stringify
};
var stringify$2 = function stringify(it, replacer, space) {
    return apply$1(path$4.JSON.stringify, null, arguments);
};
getDefaultExportFromCjs(stringify$2);

var parent$e = stringify$2;
var stringify$1 = parent$e;
getDefaultExportFromCjs(stringify$1);

var stringify = stringify$1;
var _JSON$stringify = getDefaultExportFromCjs(stringify);

var $$5 = _export;
var uncurryThis$1 = functionUncurryThisClause;
var $indexOf = arrayIncludes.indexOf;
var arrayMethodIsStrict = arrayMethodIsStrict$2;
var nativeIndexOf = uncurryThis$1([].indexOf);
var NEGATIVE_ZERO = !!nativeIndexOf && 1 / nativeIndexOf([1], 1, -0) < 0;
var FORCED$1 = NEGATIVE_ZERO || !arrayMethodIsStrict('indexOf');
$$5({
    target: 'Array',
    proto: true,
    forced: FORCED$1
}, {
    indexOf: function indexOf(searchElement) {
        var fromIndex = arguments.length > 1 ? arguments[1] : undefined;
        return NEGATIVE_ZERO ? nativeIndexOf(this, searchElement, fromIndex) || 0 : $indexOf(this, searchElement, fromIndex);
    }
});

var getBuiltInPrototypeMethod$1 = getBuiltInPrototypeMethod$b;
var indexOf$3 = getBuiltInPrototypeMethod$1('Array', 'indexOf');
getDefaultExportFromCjs(indexOf$3);

var isPrototypeOf$1 = objectIsPrototypeOf;
var method$1 = indexOf$3;
var ArrayPrototype = Array.prototype;
var indexOf$2 = function (it) {
    var own = it.indexOf;
    return it === ArrayPrototype || isPrototypeOf$1(ArrayPrototype, it) && own === ArrayPrototype.indexOf ? method$1 : own;
};
getDefaultExportFromCjs(indexOf$2);

var parent$d = indexOf$2;
var indexOf$1 = parent$d;
getDefaultExportFromCjs(indexOf$1);

var indexOf = indexOf$1;
var _indexOfInstanceProperty = getDefaultExportFromCjs(indexOf);

function ownKeys(e, r) {
    var t = _Object$keys(e);
    if (_Object$getOwnPropertySymbols) {
        var o = _Object$getOwnPropertySymbols(e);
        (r && (o = _filterInstanceProperty(o).call(o, function (r) {
            return _Object$getOwnPropertyDescriptor(e, r).enumerable;
        })), t.push.apply(t, o));
    }
    return t;
}
function _objectSpread(e) {
    for (var r = 1; r < arguments.length; r++) {
        var _context12, _context13;
        var t = null != arguments[r] ? arguments[r] : {};
        r % 2 ? _forEachInstanceProperty(_context12 = ownKeys(Object(t), !0)).call(_context12, function (r) {
            _defineProperty(e, r, t[r]);
        }) : _Object$getOwnPropertyDescriptors ? Object.defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context13 = ownKeys(Object(t))).call(_context13, function (r) {
            Object.defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r));
        });
    }
    return e;
}
function _createForOfIteratorHelper(r, e) {
    var t = "undefined" != typeof _Symbol$1 && _getIteratorMethod(r) || r["@@iterator"];
    if (!t) {
        if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {
            t && (r = t);
            var _n = 0, F = function F() {};
            return {
                s: F,
                n: function n() {
                    return _n >= r.length ? {
                        done: !0
                    } : {
                        done: !1,
                        value: r[_n++]
                    };
                },
                e: function e(r) {
                    throw r;
                },
                f: F
            };
        }
        throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
    }
    var o, a = !0, u = !1;
    return {
        s: function s() {
            t = t.call(r);
        },
        n: function n() {
            var r = t.next();
            return (a = r.done, r);
        },
        e: function e(r) {
            (u = !0, o = r);
        },
        f: function f() {
            try {
                a || null == t.return || t.return();
            } finally {
                if (u) throw o;
            }
        }
    };
}
function _unsupportedIterableToArray(r, a) {
    if (r) {
        var _context11;
        if ("string" == typeof r) return _arrayLikeToArray(r, a);
        var t = _sliceInstanceProperty(_context11 = ({}).toString.call(r)).call(_context11, 8, -1);
        return ("Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || (/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/).test(t) ? _arrayLikeToArray(r, a) : void 0);
    }
}
function _arrayLikeToArray(r, a) {
    (null == a || a > r.length) && (a = r.length);
    for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
    return n;
}
var FormulaEditorCore = (function () {
    function FormulaEditorCore(editor) {
        var ruleRenderText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
        var formulaObjList = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
        _classCallCheck(this, FormulaEditorCore);
        _defineProperty(this, "editor", null);
        _defineProperty(this, "formulaObjList", []);
        _defineProperty(this, "ruleRenderText", '');
        _defineProperty(this, "marks", []);
        _defineProperty(this, "listen", ['change', 'inputRead', 'beforeChange']);
        this.editor = editor;
        this.ruleRenderText = ruleRenderText;
        this.formulaObjList = formulaObjList;
    }
    return _createClass(FormulaEditorCore, [{
        key: "getFormulaList",
        value: function getFormulaList() {
            var _context;
            return _flatMapInstanceProperty(_context = this.formulaObjList).call(_context, function (o) {
                return o.formula;
            });
        }
    }, {
        key: "renderData",
        value: function renderData(formulaData) {
            var _context2, _this = this;
            if (_Object$keys(formulaData).length === 0) return;
            this.editor.setValue(formulaData.ruleRenderText);
            this.marks = formulaData.marks;
            _forEachInstanceProperty(_context2 = this.marks).call(_context2, function (o) {
                _this.editor.doc.markText(o.from, o.to, {
                    className: 'cm-field',
                    attributes: {
                        'data-menuId': o.menuId,
                        'data-fieldModel': o.model
                    },
                    atomic: true
                });
            });
            var range = this.editor.getViewport();
            var cursor = {
                line: range.to
            };
            this.editor.setCursor(cursor);
        }
    }, {
        key: "registerListen",
        value: function registerListen() {
            var _iterator = _createForOfIteratorHelper(this.listen), _step;
            try {
                for (_iterator.s(); !(_step = _iterator.n()).done; ) {
                    var _context3, _context4;
                    var item = _step.value;
                    var fn = this[_concatInstanceProperty(_context3 = ("on").concat(item.charAt(0).toUpperCase())).call(_context3, _sliceInstanceProperty(item).call(item, 1))];
                    this.editor.on(item, fn.bind.apply(fn, _concatInstanceProperty(_context4 = [this]).call(_context4, _sliceInstanceProperty(Array.prototype).call(arguments))));
                }
            } catch (err) {
                _iterator.e(err);
            } finally {
                _iterator.f();
            }
        }
    }, {
        key: "onInputRead",
        value: function onInputRead(cm, change) {
            cm.showHint({
                hint: this.customHint.bind(this),
                completeSingle: false
            });
        }
    }, {
        key: "getData",
        value: function getData() {
            return {
                ruleRenderText: this.ruleRenderText,
                marks: this.marks
            };
        }
    }, {
        key: "reset",
        value: function reset() {
            this.editor.setValue('');
            this.ruleRenderText = '';
            this.marks = [];
        }
    }, {
        key: "onChange",
        value: function onChange(cm, changeObj) {
            var _context5, _context6;
            this.marks = _mapInstanceProperty(_context5 = _filterInstanceProperty(_context6 = cm.getAllMarks()).call(_context6, function (o) {
                return o.className === 'cm-field';
            })).call(_context5, function (marks) {
                var attributes = marks.attributes;
                return _objectSpread(_objectSpread({}, _findInstanceProperty(marks).call(marks)), {}, {
                    model: attributes['data-fieldModel'],
                    menuId: attributes['data-menuId']
                });
            });
            this.ruleRenderText = cm.getValue();
            if (changeObj.origin === 'complete') {
                this.moveCursor('left', 1);
            }
        }
    }, {
        key: "insertText",
        value: function insertText(data, type) {
            var cursor = this.editor.getCursor();
            this.editor.replaceRange(type === 'field' ? _JSON$stringify(data) : data, cursor);
            type === 'formula' && this.moveCursor('left', 1);
            this.editor.focus();
        }
    }, {
        key: "moveCursor",
        value: function moveCursor(direction, step) {
            var cursor = this.editor.getCursor();
            var line = cursor.line;
            var ch = cursor.ch;
            if (direction === 'left') {
                this.editor.setCursor({
                    line: line,
                    ch: ch - step
                });
            } else if (direction === 'right') {
                this.editor.setCursor({
                    line: line,
                    ch: ch + step
                });
            } else if (direction === 'up') {
                this.editor.setCursor({
                    line: line - step,
                    ch: ch
                });
            } else if (direction === 'down') {
                this.editor.setCursor({
                    line: line + step,
                    ch: ch
                });
            }
        }
    }, {
        key: "onBeforeChange",
        value: function onBeforeChange(cm, changeObj) {
            var text = changeObj.text, from = changeObj.from, cancel = changeObj.cancel;
            var data = this.matchField(text[0]);
            if (data.length) {
                cancel();
                var field = JSON.parse(data[0]);
                var fieldFrom = _objectSpread({}, from);
                var to = _objectSpread(_objectSpread({}, from), {}, {
                    ch: from.ch + field.label.length
                });
                cm.replaceRange(field.label, fieldFrom);
                cm.doc.markText(fieldFrom, to, {
                    className: 'cm-field',
                    attributes: {
                        'data-menuId': field.menuId,
                        'data-fieldModel': field.model
                    },
                    atomic: true
                });
            }
        }
    }, {
        key: "matchField",
        value: function matchField(text) {
            var regex = /\{[^}]+\}/g;
            return text.match(regex) || [];
        }
    }, {
        key: "matchWord",
        value: function matchWord(text) {
            var match = text.match(/[a-zA-Z]+$/);
            return match ? match[0] : '';
        }
    }, {
        key: "matchFormula",
        value: function matchFormula(text) {
            if (!text) return false;
            var suggestions = this.getFormulaList();
            var match = _findInstanceProperty(suggestions).call(suggestions, function (o) {
                return o.name === text;
            });
            return match;
        }
    }, {
        key: "customHint",
        value: function customHint(cm) {
            var _context7, _context8;
            var cursor = cm.getCursor();
            var currentLineText = cm.getLine(cursor.line);
            var matchWords = this.matchWord(currentLineText);
            var start = cursor.ch;
            var suggestions = this.getFormulaList();
            var result = {
                list: _mapInstanceProperty(_context7 = _filterInstanceProperty(_context8 = _mapInstanceProperty(suggestions).call(suggestions, function (o) {
                    return {
                        text: ("").concat(o.name, "()"),
                        displayText: o.name,
                        tip: o.tip
                    };
                })).call(_context8, function (suggestion) {
                    var _context9;
                    return matchWords && _includesInstanceProperty(_context9 = suggestion.text.toLowerCase()).call(_context9, matchWords.toLowerCase());
                })).call(_context7, function (suggestion) {
                    var _context10;
                    var text = suggestion.displayText;
                    var matchIndex = _indexOfInstanceProperty(_context10 = text.toLowerCase()).call(_context10, matchWords.toLowerCase());
                    suggestion.render = function (element, self, data) {
                        if (matchIndex >= 0) {
                            var beforeMatch = _sliceInstanceProperty(text).call(text, 0, matchIndex);
                            var match = _sliceInstanceProperty(text).call(text, matchIndex, matchIndex + matchWords.length);
                            var afterMatch = _sliceInstanceProperty(text).call(text, matchIndex + matchWords.length);
                            var span = document.createElement('span');
                            if (beforeMatch) {
                                span.appendChild(document.createTextNode(beforeMatch));
                            }
                            var highlight = document.createElement('span');
                            highlight.textContent = match;
                            highlight.style.fontWeight = 'bold';
                            highlight.style.color = '#ff0000';
                            span.appendChild(highlight);
                            if (afterMatch) {
                                span.appendChild(document.createTextNode(afterMatch));
                            }
                            element.appendChild(span);
                        } else {
                            element.appendChild(document.createTextNode(text));
                        }
                    };
                    return suggestion;
                }),
                from: {
                    line: cursor.line,
                    ch: start - matchWords.length
                },
                to: {
                    line: cursor.line,
                    ch: start
                }
            };
            return result;
        }
    }]);
})();

var script$7 = {
    name: 'FieldVariable',
    props: {
        formComponentsList: {
            type: Array,
            default: () => []
        }
    },
    components: {},
    data() {
        return {};
    },
    computed: {},
    watch: {},
    methods: {},
    async created() {},
    mounted() {}
};

/* script */ var __vue_script__$7 = script$7;
/* template */
var __vue_render__$7 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "field-variable" },
    [
      _c("div", [_vm._v("表单组件列表")]),
      _vm._v(" "),
      _vm._l(_vm.formComponentsList, function(item) {
        return _c(
          "div",
          {
            key: item.enCode,
            staticClass: "field-item",
            on: {
              click: function($event) {
                return _vm.$emit("fieldSelect", item)
              }
            }
          },
          [_c("span", [_vm._v(_vm._s(item.label))])]
        )
      })
    ],
    2
  )
};
var __vue_staticRenderFns__$7 = [];
__vue_render__$7._withStripped = true;

  /* style */
  var __vue_inject_styles__$7 = undefined;
  /* scoped */
  var __vue_scope_id__$7 = undefined;
  /* module identifier */
  var __vue_module_identifier__$7 = undefined;
  /* functional template */
  var __vue_is_functional_template__$7 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$7 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$7, staticRenderFns: __vue_staticRenderFns__$7 },
    __vue_inject_styles__$7,
    __vue_script__$7,
    __vue_scope_id__$7,
    __vue_is_functional_template__$7,
    __vue_module_identifier__$7,
    false,
    undefined,
    undefined,
    undefined
  );

var script$6 = {
    name: 'FormulaList',
    props: {
        treeData: {
            type: Array,
            default: () => []
        }
    },
    data() {
        return {
            replaceFields: {
                children: 'formula',
                title: 'name'
            }
        };
    },
    watch: {},
    methods: {
        nodeClick(o, info) {
            var dataRef = info.node.dataRef;
            if (dataRef.formula) return;
            this.$emit('formulaClick', dataRef);
        }
    },
    created() {},
    mounted() {}
};

/* script */ var __vue_script__$6 = script$6;
/* template */
var __vue_render__$6 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "formula-list" },
    [
      _c(
        "a-tree",
        {
          attrs: {
            "tree-data": _vm.treeData,
            "replace-fields": _vm.replaceFields
          },
          on: { select: _vm.nodeClick },
          scopedSlots: _vm._u([
            {
              key: "title",
              fn: function(ref) {
                var dataRef = ref.dataRef;
                return [
                  _c("span", { staticClass: "info-container" }, [
                    _c("span", [_vm._v(_vm._s(dataRef.name))]),
                    _vm._v(" "),
                    dataRef.tip
                      ? _c("span", { staticClass: "tip" }, [
                          _vm._v(
                            "\n          " + _vm._s(dataRef.tip) + "\n        "
                          )
                        ])
                      : _vm._e()
                  ])
                ]
              }
            }
          ])
        },
        [
          _c("a-icon", {
            attrs: { slot: "switcherIcon", type: "down" },
            slot: "switcherIcon"
          })
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$6 = [];
__vue_render__$6._withStripped = true;

  /* style */
  var __vue_inject_styles__$6 = undefined;
  /* scoped */
  var __vue_scope_id__$6 = undefined;
  /* module identifier */
  var __vue_module_identifier__$6 = undefined;
  /* functional template */
  var __vue_is_functional_template__$6 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$6 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$6, staticRenderFns: __vue_staticRenderFns__$6 },
    __vue_inject_styles__$6,
    __vue_script__$6,
    __vue_scope_id__$6,
    __vue_is_functional_template__$6,
    __vue_module_identifier__$6,
    false,
    undefined,
    undefined,
    undefined
  );

var uncurryThis = functionUncurryThis;
var aCallable = aCallable$6;
var isObject$1 = isObject$e;
var hasOwn = hasOwnProperty_1;
var arraySlice = arraySlice$3;
var NATIVE_BIND = functionBindNative;
var $Function = Function;
var concat = uncurryThis([].concat);
var join = uncurryThis([].join);
var factories = {};
var construct$3 = function (C, argsLength, args) {
    if (!hasOwn(factories, argsLength)) {
        var list = [];
        var i = 0;
        for (; i < argsLength; i++) list[i] = 'a[' + i + ']';
        factories[argsLength] = $Function('C,a', 'return new C(' + join(list, ',') + ')');
    }
    return factories[argsLength](C, args);
};
var functionBind = NATIVE_BIND ? $Function.bind : function bind(that) {
    var F = aCallable(this);
    var Prototype = F.prototype;
    var partArgs = arraySlice(arguments, 1);
    var boundFunction = function bound() {
        var args = concat(partArgs, arraySlice(arguments));
        return this instanceof boundFunction ? construct$3(F, args.length, args) : F.apply(that, args);
    };
    if (isObject$1(Prototype)) boundFunction.prototype = Prototype;
    return boundFunction;
};
getDefaultExportFromCjs(functionBind);

var isConstructor = isConstructor$4;
var tryToString = tryToString$4;
var $TypeError = TypeError;
var aConstructor$1 = function (argument) {
    if (isConstructor(argument)) return argument;
    throw new $TypeError(tryToString(argument) + ' is not a constructor');
};
getDefaultExportFromCjs(aConstructor$1);

var $$4 = _export;
var getBuiltIn = getBuiltIn$b;
var apply = functionApply;
var bind$7 = functionBind;
var aConstructor = aConstructor$1;
var anObject = anObject$9;
var isObject = isObject$e;
var create$6 = objectCreate;
var fails$1 = fails$n;
var nativeConstruct = getBuiltIn('Reflect', 'construct');
var ObjectPrototype = Object.prototype;
var push = [].push;
var NEW_TARGET_BUG = fails$1(function () {
    function F() {}
    return !(nativeConstruct(function () {}, [], F) instanceof F);
});
var ARGS_BUG = !fails$1(function () {
    nativeConstruct(function () {});
});
var FORCED = NEW_TARGET_BUG || ARGS_BUG;
$$4({
    target: 'Reflect',
    stat: true,
    forced: FORCED,
    sham: FORCED
}, {
    construct: function construct(Target, args) {
        aConstructor(Target);
        anObject(args);
        var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);
        if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);
        if (Target === newTarget) {
            switch (args.length) {
                case 0:
                    return new Target();
                case 1:
                    return new Target(args[0]);
                case 2:
                    return new Target(args[0], args[1]);
                case 3:
                    return new Target(args[0], args[1], args[2]);
                case 4:
                    return new Target(args[0], args[1], args[2], args[3]);
            }
            var $args = [null];
            apply(push, $args, args);
            return new (apply(bind$7, Target, $args))();
        }
        var proto = newTarget.prototype;
        var instance = create$6(isObject(proto) ? proto : ObjectPrototype);
        var result = apply(Target, instance, args);
        return isObject(result) ? result : instance;
    }
});

var path$3 = path$g;
var construct$2 = path$3.Reflect.construct;
getDefaultExportFromCjs(construct$2);

var parent$c = construct$2;
var construct$1 = parent$c;
getDefaultExportFromCjs(construct$1);

var construct = construct$1;
var _Reflect$construct = getDefaultExportFromCjs(construct);

function _assertThisInitialized(e) {
    if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
    return e;
}

function _possibleConstructorReturn(t, e) {
    if (e && ("object" == _typeof(e) || "function" == typeof e)) return e;
    if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined");
    return _assertThisInitialized(t);
}

var $$3 = _export;
var setPrototypeOf$5 = objectSetPrototypeOf;
$$3({
    target: 'Object',
    stat: true
}, {
    setPrototypeOf: setPrototypeOf$5
});

var path$2 = path$g;
var setPrototypeOf$4 = path$2.Object.setPrototypeOf;
getDefaultExportFromCjs(setPrototypeOf$4);

var parent$b = setPrototypeOf$4;
var setPrototypeOf$3 = parent$b;
getDefaultExportFromCjs(setPrototypeOf$3);

var parent$a = setPrototypeOf$3;
var setPrototypeOf$2 = parent$a;
getDefaultExportFromCjs(setPrototypeOf$2);

var parent$9 = setPrototypeOf$2;
var setPrototypeOf$1 = parent$9;
getDefaultExportFromCjs(setPrototypeOf$1);

var setPrototypeOf = setPrototypeOf$1;
var _Object$setPrototypeOf = getDefaultExportFromCjs(setPrototypeOf);

var $$2 = _export;
var bind$6 = functionBind;
$$2({
    target: 'Function',
    proto: true,
    forced: Function.bind !== bind$6
}, {
    bind: bind$6
});

var getBuiltInPrototypeMethod = getBuiltInPrototypeMethod$b;
var bind$5 = getBuiltInPrototypeMethod('Function', 'bind');
getDefaultExportFromCjs(bind$5);

var isPrototypeOf = objectIsPrototypeOf;
var method = bind$5;
var FunctionPrototype = Function.prototype;
var bind$4 = function (it) {
    var own = it.bind;
    return it === FunctionPrototype || isPrototypeOf(FunctionPrototype, it) && own === FunctionPrototype.bind ? method : own;
};
getDefaultExportFromCjs(bind$4);

var parent$8 = bind$4;
var bind$3 = parent$8;
getDefaultExportFromCjs(bind$3);

var parent$7 = bind$3;
var bind$2 = parent$7;
getDefaultExportFromCjs(bind$2);

var parent$6 = bind$2;
var bind$1 = parent$6;
getDefaultExportFromCjs(bind$1);

var bind = bind$1;
var _bindInstanceProperty = getDefaultExportFromCjs(bind);

var $$1 = _export;
var fails = fails$n;
var toObject = toObject$a;
var nativeGetPrototypeOf = objectGetPrototypeOf;
var CORRECT_PROTOTYPE_GETTER = correctPrototypeGetter;
var FAILS_ON_PRIMITIVES = fails(function () {
    nativeGetPrototypeOf(1);
});
$$1({
    target: 'Object',
    stat: true,
    forced: FAILS_ON_PRIMITIVES,
    sham: !CORRECT_PROTOTYPE_GETTER
}, {
    getPrototypeOf: function getPrototypeOf(it) {
        return nativeGetPrototypeOf(toObject(it));
    }
});

var path$1 = path$g;
var getPrototypeOf$4 = path$1.Object.getPrototypeOf;
getDefaultExportFromCjs(getPrototypeOf$4);

var parent$5 = getPrototypeOf$4;
var getPrototypeOf$3 = parent$5;
getDefaultExportFromCjs(getPrototypeOf$3);

var parent$4 = getPrototypeOf$3;
var getPrototypeOf$2 = parent$4;
getDefaultExportFromCjs(getPrototypeOf$2);

var parent$3 = getPrototypeOf$2;
var getPrototypeOf$1 = parent$3;
getDefaultExportFromCjs(getPrototypeOf$1);

var getPrototypeOf = getPrototypeOf$1;
var _Object$getPrototypeOf = getDefaultExportFromCjs(getPrototypeOf);

function _getPrototypeOf(t) {
    var _context;
    return (_getPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$getPrototypeOf).call(_context) : function (t) {
        return t.__proto__ || _Object$getPrototypeOf(t);
    }, _getPrototypeOf(t));
}

var $ = _export;
var DESCRIPTORS = descriptors;
var create$5 = objectCreate;
$({
    target: 'Object',
    stat: true,
    sham: !DESCRIPTORS
}, {
    create: create$5
});

var path = path$g;
var Object$1 = path.Object;
var create$4 = function create(P, D) {
    return Object$1.create(P, D);
};
getDefaultExportFromCjs(create$4);

var parent$2 = create$4;
var create$3 = parent$2;
getDefaultExportFromCjs(create$3);

var parent$1 = create$3;
var create$2 = parent$1;
getDefaultExportFromCjs(create$2);

var parent = create$2;
var create$1 = parent;
getDefaultExportFromCjs(create$1);

var create = create$1;
var _Object$create = getDefaultExportFromCjs(create);

function _setPrototypeOf(t, e) {
    var _context;
    return (_setPrototypeOf = _Object$setPrototypeOf ? _bindInstanceProperty(_context = _Object$setPrototypeOf).call(_context) : function (t, e) {
        return (t.__proto__ = e, t);
    }, _setPrototypeOf(t, e));
}

function _inherits(t, e) {
    if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function");
    (t.prototype = _Object$create(e && e.prototype, {
        constructor: {
            value: t,
            writable: !0,
            configurable: !0
        }
    }), _Object$defineProperty(t, "prototype", {
        writable: !1
    }), e && _setPrototypeOf(t, e));
}

var BaseFormula = _createClass(function BaseFormula(params) {
    _classCallCheck(this, BaseFormula);
    _defineProperty(this, "name", '');
    _defineProperty(this, "formula", []);
    _defineProperty(this, "enCode", '');
    var name = params.name, formula = params.formula, enCode = params.enCode;
    this.name = name;
    this.formula = formula;
    this.enCode = enCode;
});

var formula$1 = [
	{
		name: "CONCATENATE",
		enCode: "CONCATENATE",
		tip: "合并多个文本",
		example: "CONCATENATE(\"Hello\",\"World\") = \"HelloWorld\"",
		usage: "CONCATENATE(文本1,文本2,...)。",
		params: {
			paramsNumber: "n"
		}
	},
	{
		name: "SUM",
		enCode: "SUM",
		tip: "求和",
		example: "SUM(数学成绩,语文成绩,英语成绩,...) = 各科总成绩",
		usage: "SUM(数值1,数值2,...)。",
		params: {
			paramsNumber: "n"
		}
	},
	{
		name: "DATE",
		enCode: "DATE",
		tip: "返回特定日期",
		example: "DATE(2021,1,1)",
		usage: "DATE(year,month,day)。"
	},
	{
		name: "IF",
		enCode: "IF",
		tip: "条件判断",
		example: "IF(成绩>60,'及格','不及格')",
		usage: "IF(逻辑语句,真值,假值)。",
		params: {
			paramsNumber: "3",
			paramsType: [
				"boolean",
				"string",
				"string"
			]
		}
	}
];

function _callSuper$1(t, o, e) {
    return (o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct$1() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)));
}
function _isNativeReflectConstruct$1() {
    try {
        var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
    } catch (t) {}
    return (_isNativeReflectConstruct$1 = function _isNativeReflectConstruct() {
        return !!t;
    })();
}
var FrequentlyUse = (function (_BaseFormula) {
    function FrequentlyUse() {
        _classCallCheck(this, FrequentlyUse);
        return _callSuper$1(this, FrequentlyUse, [{
            name: '常用函数',
            enCode: 'frequentlyUse',
            formula: formula$1
        }]);
    }
    _inherits(FrequentlyUse, _BaseFormula);
    return _createClass(FrequentlyUse);
})(BaseFormula);

var formula = [
	{
		name: "ABS",
		enCode: "ABS",
		tip: "获取绝对值",
		example: "ABS(-3) = 3",
		usage: "ABS(数字)。",
		params: {
			paramsNumber: 1
		}
	},
	{
		name: "AVERAGE",
		enCode: "AVERAGE",
		tip: "求平均值",
		example: "AVERAGE(1,2,3) = 2",
		usage: "AVERAGE(数字1,数字2,...)。"
	},
	{
		name: "CEILING",
		enCode: "CEILING",
		tip: "增大到指定因数倍数",
		example: "CEILING(7,6)返回12，因为12比7大的同时，也是6的倍数中最接近7的数字。",
		usage: "CEILING(数字,因数)。"
	},
	{
		name: "COUNT",
		enCode: "COUNT",
		tip: "统计个数",
		example: "COUNT(1,2,3,4) = 4",
		usage: "COUNT(数字1,数字2,...)。"
	}
];

function _callSuper(t, o, e) {
    return (o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? _Reflect$construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)));
}
function _isNativeReflectConstruct() {
    try {
        var t = !Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {}));
    } catch (t) {}
    return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
        return !!t;
    })();
}
var MathFormula = (function (_BaseFormula) {
    function MathFormula() {
        _classCallCheck(this, MathFormula);
        return _callSuper(this, MathFormula, [{
            name: '数学函数',
            enCode: 'math',
            formula: formula
        }]);
    }
    _inherits(MathFormula, _BaseFormula);
    return _createClass(MathFormula);
})(BaseFormula);

var formulaContent = [FrequentlyUse, MathFormula];

var script$5 = {
    name: 'YlyRulePanel',
    components: {
        codemirror: vueCodemirrorExports.codemirror,
        FieldVariable: __vue_component__$7,
        FormulaList: __vue_component__$6
    },
    props: {
        fieldList: {
            type: Array,
            default: () => []
        },
        formComponentsList: {
            type: Array,
            default: () => []
        },
        ruleConfig: {
            type: Object,
            default: () => {}
        }
    },
    data() {
        return {
            editorCore: null,
            ruleRenderText: '',
            currentFormula: null,
            options: {
                autofocus: true,
                line: true,
                height: 200,
                theme: '3024-day',
                tabSize: 4,
                readOnly: false,
                autorefresh: false,
                smartIndent: true,
                lineNumbers: false,
                styleActiveLine: true,
                showCursorWhenSelecting: true
            },
            computedFormulaList: [],
            ruleContextConf: {}
        };
    },
    computed: {},
    created() {
        console.log('123');
    },
    mounted() {
        console.log(formulaContent, 'formulaContent');
        this.computedFormulaList = formulaContent.map(ObjInstance => new ObjInstance());
    },
    methods: {
        reset() {
            this.currentFormula = null;
            this.editorCore.reset();
        },
        getData() {
            return this.editorCore.getData();
        },
        onCmReady(codemirror) {
            this.editorCore = new FormulaEditorCore(codemirror, this.ruleConfig.ruleRenderText, this.computedFormulaList);
            this.editorCore.registerListen();
            this.editorCore.renderData(this.ruleConfig);
        },
        onFormulaClick(formula) {
            this.currentFormula = formula;
            this.editorCore.insertText(`${formula.name}()`, 'formula');
        },
        onFieldSelect(field) {
            this.editorCore.insertText({
                ...field,
                menuId: this.model
            }, 'field');
        },
        ruleConfigValidate() {},
        getRuleConfig() {
            return this.editorCore.getData();
        }
    }
};

/* script */ var __vue_script__$5 = script$5;
/* template */
var __vue_render__$5 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "vue-formula" },
    [
      _c("codemirror", {
        attrs: { options: _vm.options },
        on: { ready: _vm.onCmReady }
      }),
      _vm._v(" "),
      _c(
        "div",
        { staticClass: "operator-container" },
        [
          _c("FieldVariable", {
            staticClass: "field-variable",
            attrs: { formComponentsList: _vm.formComponentsList },
            on: { fieldSelect: _vm.onFieldSelect }
          }),
          _vm._v(" "),
          _c("FormulaList", {
            staticClass: "formula-list",
            attrs: { treeData: _vm.computedFormulaList },
            on: { formulaClick: _vm.onFormulaClick }
          }),
          _vm._v(" "),
          _vm.currentFormula
            ? _c("div", { staticClass: "formula-info" }, [
                _c("div", { staticClass: "info-text" }, [
                  _vm._v(_vm._s(_vm.currentFormula.tip))
                ]),
                _vm._v(" "),
                _c("div", { staticClass: "info-text" }, [
                  _vm._v("用法：" + _vm._s(_vm.currentFormula.usage))
                ]),
                _vm._v(" "),
                _c("div", { staticClass: "info-text" }, [
                  _vm._v("示例：" + _vm._s(_vm.currentFormula.example))
                ])
              ])
            : _vm._e()
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$5 = [];
__vue_render__$5._withStripped = true;

  /* style */
  var __vue_inject_styles__$5 = undefined;
  /* scoped */
  var __vue_scope_id__$5 = undefined;
  /* module identifier */
  var __vue_module_identifier__$5 = undefined;
  /* functional template */
  var __vue_is_functional_template__$5 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$5 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$5, staticRenderFns: __vue_staticRenderFns__$5 },
    __vue_inject_styles__$5,
    __vue_script__$5,
    __vue_scope_id__$5,
    __vue_is_functional_template__$5,
    __vue_module_identifier__$5,
    false,
    undefined,
    undefined,
    undefined
  );

var script$4 = {
    name: 'YlyRuleConfigModal',
    components: {
        YlyRuleOperationHeader: __vue_component__$8,
        YlyRulePanel: __vue_component__$5
    },
    props: {},
    data() {
        return {
            confirmLoading: false,
            visible: false,
            ruleList: [],
            formComponentsList: [],
            callback: null,
            ruleConfig: []
        };
    },
    mounted() {},
    methods: {
        openModal({formComponentsList, callback, ruleConfig}) {
            this.visible = true;
            this.callback = callback;
            this.ruleConfig = ruleConfig;
            this.formComponentsList = formComponentsList.map(item => {
                return {
                    label: item.label,
                    code: item.code,
                    model: item.model
                };
            });
        },
        handleOk() {
            var ruleConfig = this.$refs.ylyRulePanel.getRuleConfig();
            this.callback(ruleConfig);
            this.visible = false;
        },
        handleCancel() {
            this.visible = false;
        },
        addRuleItem(ruleConfig) {
            ruleConfig && ruleConfig.ruleType && this.ruleList.push(ruleConfig);
        }
    }
};

/* script */ var __vue_script__$4 = script$4;

/* template */
var __vue_render__$4 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      _c(
        "a-modal",
        {
          attrs: {
            title: "规则配置",
            visible: _vm.visible,
            "confirm-loading": _vm.confirmLoading,
            okText: _vm.$t("确定"),
            cancelText: _vm.$t("取消"),
            width: 872,
            destroyOnClose: true
          },
          on: { ok: _vm.handleOk, cancel: _vm.handleCancel }
        },
        [
          _c("yly-rule-panel", {
            ref: "ylyRulePanel",
            attrs: {
              ruleList: _vm.ruleList,
              ruleConfig: _vm.ruleConfig,
              formComponentsList: _vm.formComponentsList
            }
          })
        ],
        1
      )
    ],
    1
  )
};
var __vue_staticRenderFns__$4 = [];
__vue_render__$4._withStripped = true;

  /* style */
  var __vue_inject_styles__$4 = undefined;
  /* scoped */
  var __vue_scope_id__$4 = undefined;
  /* module identifier */
  var __vue_module_identifier__$4 = undefined;
  /* functional template */
  var __vue_is_functional_template__$4 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$4 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$4, staticRenderFns: __vue_staticRenderFns__$4 },
    __vue_inject_styles__$4,
    __vue_script__$4,
    __vue_scope_id__$4,
    __vue_is_functional_template__$4,
    __vue_module_identifier__$4,
    false,
    undefined,
    undefined,
    undefined
  );

var script$3 = {
    name: 'FormRuleConfigValueEditor',
    mixins: [editorComponentMixin],
    components: {
        YlyRuleConfigModal: __vue_component__$4
    },
    props: {},
    computed: {
        alreadyBindFieldComponentsList() {
            return this.formSource.formDataControl.allBindFieldFormItemList;
        }
    },
    methods: {
        handleAddRuleConfig() {
            var confirmRuleConfig = ruleConfig => {
                console.log(ruleConfig);
                console.log(this);
                this.updateSelectConfigByField('ruleConfig', ruleConfig);
            };
            this.$refs.ylyRuleConfigModal.openModal({
                formComponentsList: this.alreadyBindFieldComponentsList,
                callback: confirmRuleConfig,
                ruleConfig: this.getSelectConfigByField('ruleConfig') || ({})
            });
        }
    }
};

/* script */ var __vue_script__$3 = script$3;
/* template */
var __vue_render__$3 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    [
      _c(
        "a-form-item",
        { attrs: { label: _vm.$t("规则配置") } },
        [
          _c("a-switch", {
            attrs: { placeholder: "请输入", size: "small" },
            model: {
              value: _vm.editorValue,
              callback: function($$v) {
                _vm.editorValue = $$v;
              },
              expression: "editorValue"
            }
          })
        ],
        1
      ),
      _vm._v(" "),
      _vm.editorValue
        ? _c("a-button", { on: { click: _vm.handleAddRuleConfig } }, [
            _vm._v(_vm._s(_vm.$t("添加规则")))
          ])
        : _vm._e(),
      _vm._v(" "),
      _c("yly-rule-config-modal", {
        ref: "ylyRuleConfigModal",
        attrs: {
          alreadyBindFieldComponentsList: _vm.alreadyBindFieldComponentsList
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__$3 = [];
__vue_render__$3._withStripped = true;

  /* style */
  var __vue_inject_styles__$3 = undefined;
  /* scoped */
  var __vue_scope_id__$3 = undefined;
  /* module identifier */
  var __vue_module_identifier__$3 = undefined;
  /* functional template */
  var __vue_is_functional_template__$3 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$3 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$3, staticRenderFns: __vue_staticRenderFns__$3 },
    __vue_inject_styles__$3,
    __vue_script__$3,
    __vue_scope_id__$3,
    __vue_is_functional_template__$3,
    __vue_module_identifier__$3,
    false,
    undefined,
    undefined,
    undefined
  );

var script$2 = {
    name: "TableAssociatedField",
    props: {
        selectItem: {
            type: Object,
            required: true
        },
        formSource: {
            type: Object,
            default() {
                return {};
            }
        }
    },
    data() {
        return {
            addressConfig: [{
                key: 'provinceKey',
                id: 'provinceId',
                label: this.$t('省Code')
            }, {
                key: 'provinceNameKey',
                id: 'provinceNameId',
                label: this.$t('省Name')
            }, {
                key: 'cityKey',
                id: 'cityId',
                label: this.$t('市Code')
            }, {
                key: 'cityNameKey',
                id: 'cityNameId',
                label: this.$t('市Name')
            }, {
                key: 'areaKey',
                id: 'areaId',
                label: this.$t('区Code')
            }, {
                key: 'areaNameKey',
                id: 'areaNameId',
                label: this.$t('区Name')
            }]
        };
    },
    computed: {
        allDbFormFieldList() {
            return this.formSource.formDataControl.allDbFormFieldList;
        },
        isNeedBindName() {
            return ylyFormConstants.SELECT_COMPONENT_CODE.includes(this.selectItem.code);
        },
        formPageConfig() {
            return this.formSource.formDataControl && this.formSource.formDataControl.formPageConfig;
        }
    },
    methods: {
        filterFiledOption(input, option) {
            return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0;
        },
        handleChangeAssField(fieldId) {
            if (!fieldId) {
                this.formSource.formDataControl.deleteAlreadyBindFieldList(this.selectItem.model);
                this.$emit('updateSelectItemInfo', {
                    model: undefined
                });
                return;
            }
            var {status, fieldConfig} = this.getVerifyFieldStatus(fieldId);
            if (!status) {
                this.$emit('updateSelectItemInfo', {
                    model: undefined,
                    columnId: undefined
                });
                return;
            }
            let originField = this.selectItem.model;
            var newFieldConfig = this.getBindFieldConfig(fieldConfig);
            this.$emit('updateSelectItemInfo', {
                label: fieldConfig.dbFieldTxt,
                model: fieldConfig.dbFieldName
            });
            this.formSource.formDataControl.addAlreadyBindFieldList(newFieldConfig, originField);
        },
        handleChangeAssNameField(fieldId) {
            if (!fieldId) {
                this.formSource.formDataControl.deleteAlreadyBindFieldList(this.selectItem.fieldRelatedName);
                this.$emit('updateSelectItemInfo', {
                    fieldRelatedName: undefined
                });
                return;
            }
            if (!this.selectItem.columnId) {
                this.$message.error(this.$t('请先选择主表字段Code'));
                this.$emit('updateSelectItemInfo', {
                    fieldRelatedName: undefined,
                    fieldRelateId: undefined
                });
                return;
            }
            var {status, fieldConfig} = this.getVerifyFieldStatus(fieldId);
            if (!status) {
                this.$emit('updateSelectItemInfo', {
                    fieldRelatedName: undefined,
                    fieldRelateId: undefined
                });
                return;
            }
            let originField = this.selectItem.fieldRelatedName;
            var newFieldConfig = this.getBindFieldConfig(fieldConfig);
            this.$emit('updateSelectItemInfo', {
                fieldRelatedName: newFieldConfig.dbFieldNameUp
            });
            this.formSource.formDataControl.addAlreadyBindFieldList(newFieldConfig, originField);
        },
        handleChangeAreaFields(fieldId, address) {
            if (!fieldId) {
                this.formSource.formDataControl.deleteAlreadyBindFieldList(this.selectItem.bindDataInfo[address.key]);
                this.$emit('updateSelectItemInfo', {
                    bindDataInfo: {
                        ...this.selectItem.bindDataInfo,
                        [address.key]: undefined
                    }
                });
                return;
            }
            var {status, fieldConfig} = this.getVerifyFieldStatus(fieldId);
            if (!status) {
                this.$emit('updateSelectItemInfo', {
                    bindDataInfo: {
                        ...this.selectItem.bindDataInfo,
                        [address.id]: undefined,
                        [address.key]: undefined
                    }
                });
                return;
            }
            let originField = this.selectItem.bindDataInfo[address.key];
            var newFieldConfig = this.getBindFieldConfig(fieldConfig);
            var areaInfo = {};
            areaInfo[address.id] = fieldId;
            areaInfo[address.key] = newFieldConfig.dbFieldName;
            this.$emit('updateSelectItemInfo', {
                bindDataInfo: {
                    ...this.selectItem.bindDataInfo,
                    ...areaInfo
                }
            });
            this.formSource.formDataControl.addAlreadyBindFieldList(newFieldConfig, originField);
        },
        getVerifyFieldStatus(fieldId) {
            let fieldConfig = this.allDbFormFieldList.find(item => item.id === fieldId);
            if (!fieldConfig) {
                this.$message.error(this.$t('没有这个字段信息'));
                return {
                    status: false
                };
            }
            var alreadyBindField = this.formSource.formDataControl.alreadyBindFieldList.find(item => item.id === fieldId);
            if (alreadyBindField) {
                this.$message.error(this.$t('字段') + alreadyBindField.dbFieldName + this.$t('已存在'));
                return {
                    status: false
                };
            }
            return {
                status: true,
                fieldConfig
            };
        },
        getBindFieldConfig(fieldConfig) {
            var cloneFieldConfig = cloneDeep(fieldConfig);
            cloneFieldConfig.fieldDefaultValue = this.selectItem.defaultValue;
            cloneFieldConfig.isShowForm = 1;
            cloneFieldConfig.isQuery = 0;
            cloneFieldConfig.isShowList = 1;
            cloneFieldConfig.queryShowType = ylyFormConstants.QUERY_COMPONENT_TYPE_MAP[this.selectItem.code] || 'text';
            cloneFieldConfig.fieldTitle = this.selectItem.label;
            return cloneFieldConfig;
        },
        resetSelectedField() {}
    }
};

/* script */ var __vue_script__$2 = script$2;

/* template */
var __vue_render__$2 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-card",
    {
      attrs: {
        size: "small",
        title: _vm.$t("数据表:") + (_vm.formPageConfig.tableName || "")
      }
    },
    [
      _vm.selectItem.code !== "FORM_AREA_SELECT"
        ? _c(
            "a-form-model-item",
            { attrs: { label: _vm.$t("关联字段") } },
            [
              _c(
                "a-select",
                {
                  ref: "selectField",
                  attrs: {
                    placeholder: _vm.$t("请选择关联字段"),
                    "show-search": "",
                    dropdownMatchSelectWidth: false,
                    "filter-option": _vm.filterFiledOption,
                    allowClear: ""
                  },
                  on: { change: _vm.handleChangeAssField },
                  model: {
                    value: _vm.selectItem.columnId,
                    callback: function($$v) {
                      _vm.$set(_vm.selectItem, "columnId", $$v);
                    },
                    expression: "selectItem.columnId"
                  }
                },
                _vm._l(_vm.allDbFormFieldList, function(item, key) {
                  return _c(
                    "a-select-option",
                    { key: key, attrs: { value: item.id } },
                    [
                      _vm._v(
                        "\n        " +
                          _vm._s(
                            item.dbFieldName + "（" + item.dbFieldTxt + "）"
                          ) +
                          "\n      "
                      )
                    ]
                  )
                }),
                1
              )
            ],
            1
          )
        : _vm._e(),
      _vm._v(" "),
      _vm.isNeedBindName
        ? _c(
            "a-form-model-item",
            { attrs: { label: _vm.$t("主表字段名称") } },
            [
              _c(
                "a-select",
                {
                  ref: "selectFieldName",
                  attrs: {
                    placeholder: _vm.$t("请选择名称关联字段"),
                    "show-search": "",
                    allowClear: "",
                    dropdownMatchSelectWidth: false,
                    "filter-option": _vm.filterFiledOption
                  },
                  on: { change: _vm.handleChangeAssNameField },
                  model: {
                    value: _vm.selectItem.fieldRelateId,
                    callback: function($$v) {
                      _vm.$set(_vm.selectItem, "fieldRelateId", $$v);
                    },
                    expression: "selectItem.fieldRelateId"
                  }
                },
                _vm._l(_vm.allDbFormFieldList, function(item, key) {
                  return _c(
                    "a-select-option",
                    { key: key, attrs: { value: item.id } },
                    [
                      _vm._v(
                        "\n        " +
                          _vm._s(
                            item.dbFieldName + "  (" + item.dbFieldTxt + ")"
                          ) +
                          "\n      "
                      )
                    ]
                  )
                }),
                1
              )
            ],
            1
          )
        : _vm._e(),
      _vm._v(" "),
      _c(
        "a-tooltip",
        { attrs: { placement: "topLeft" } },
        [
          _c("template", { slot: "title" }, [
            _c("span", [_vm._v("不需要存储，仅在页面上需要展示的字段")])
          ]),
          _vm._v(" "),
          _c(
            "a-form-model-item",
            { attrs: { label: _vm.$t("临时字段") } },
            [
              _c("a-input", {
                ref: "selectFieldName",
                attrs: {
                  placeholder: _vm.$t("请输入临时字段"),
                  allowClear: ""
                },
                model: {
                  value: _vm.selectItem.temporaryField,
                  callback: function($$v) {
                    _vm.$set(_vm.selectItem, "temporaryField", $$v);
                  },
                  expression: "selectItem.temporaryField"
                }
              })
            ],
            1
          )
        ],
        2
      ),
      _vm._v(" "),
      _vm.selectItem.code === "FORM_AREA_SELECT"
        ? _c(
            "div",
            _vm._l(_vm.addressConfig, function(address) {
              return _c(
                "a-form-model-item",
                { key: address.key, attrs: { label: address.label } },
                [
                  _vm.formPageConfig.tableId
                    ? _c(
                        "a-select",
                        {
                          attrs: {
                            "show-search": "",
                            allowClear: "",
                            dropdownMatchSelectWidth: false,
                            "filter-option": _vm.filterFiledOption,
                            placeholder:
                              "" +
                              _vm.$t("请选择") +
                              address.label +
                              _vm.$t("字段")
                          },
                          on: {
                            change: function(value) {
                              return _vm.handleChangeAreaFields(value, address)
                            }
                          },
                          model: {
                            value: _vm.selectItem.bindDataInfo[address.id],
                            callback: function($$v) {
                              _vm.$set(
                                _vm.selectItem.bindDataInfo,
                                address.id,
                                $$v
                              );
                            },
                            expression: "selectItem.bindDataInfo[address.id]"
                          }
                        },
                        _vm._l(_vm.allDbFormFieldList, function(item, key) {
                          return _c(
                            "a-select-option",
                            { key: key, attrs: { value: item.id } },
                            [
                              _vm._v(
                                "\n          " +
                                  _vm._s(
                                    item.dbFieldName +
                                      "  (" +
                                      item.dbFieldTxt +
                                      ")"
                                  ) +
                                  "\n        "
                              )
                            ]
                          )
                        }),
                        1
                      )
                    : _vm._e()
                ],
                1
              )
            }),
            1
          )
        : _vm._e()
    ],
    1
  )
};
var __vue_staticRenderFns__$2 = [];
__vue_render__$2._withStripped = true;

  /* style */
  var __vue_inject_styles__$2 = undefined;
  /* scoped */
  var __vue_scope_id__$2 = undefined;
  /* module identifier */
  var __vue_module_identifier__$2 = undefined;
  /* functional template */
  var __vue_is_functional_template__$2 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$2 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$2, staticRenderFns: __vue_staticRenderFns__$2 },
    __vue_inject_styles__$2,
    __vue_script__$2,
    __vue_scope_id__$2,
    __vue_is_functional_template__$2,
    __vue_module_identifier__$2,
    false,
    undefined,
    undefined,
    undefined
  );

var script$1 = {
    name: 'FormTabsTitleEditorConfig',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {
        handleAddTab() {
            if (this.selectItem.tabsConfig.length === 8) {
                return this.$message.warning('最大8个页签');
            }
            this.selectItem.tabsConfig.push({
                title: `标签${this.selectItem.tabsConfig.length + 1}`,
                icon: 'more-o',
                children: []
            });
        },
        handleDeleteTab(tab, index) {
            this.selectItem.tabsConfig.splice(index, 1);
        }
    }
};

/* script */ var __vue_script__$1 = script$1;
/* template */
var __vue_render__$1 = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "div",
    { staticClass: "form-tabs-title-editor" },
    [
      _c("h3", [_vm._v(_vm._s(_vm.$t("标签管理")))]),
      _vm._v(" "),
      _vm._l(_vm.selectItem.tabsConfig, function(item, index) {
        return _c(
          "div",
          { staticClass: "tab-item" },
          [
            _c("span", { staticStyle: { flex: "0 0 60px" } }, [
              _vm._v(_vm._s(_vm.$t("页签 ") + (index + 1) + ":"))
            ]),
            _c("a-input", {
              attrs: { placeholder: "请输入标签名称" },
              model: {
                value: item.title,
                callback: function($$v) {
                  _vm.$set(item, "title", $$v);
                },
                expression: "item.title"
              }
            }),
            _vm._v(" "),
            _c("a-icon", {
              staticClass: "delete-tab-icon",
              attrs: { type: "delete" },
              on: {
                click: function($event) {
                  return _vm.handleDeleteTab(item, index)
                }
              }
            })
          ],
          1
        )
      }),
      _vm._v(" "),
      _c(
        "a-button",
        {
          staticStyle: { float: "right" },
          attrs: { size: "small", type: "primary" },
          on: { click: _vm.handleAddTab }
        },
        [_vm._v(_vm._s(_vm.$t("添加页签")))]
      )
    ],
    2
  )
};
var __vue_staticRenderFns__$1 = [];
__vue_render__$1._withStripped = true;

  /* style */
  var __vue_inject_styles__$1 = undefined;
  /* scoped */
  var __vue_scope_id__$1 = undefined;
  /* module identifier */
  var __vue_module_identifier__$1 = undefined;
  /* functional template */
  var __vue_is_functional_template__$1 = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__$1 = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__$1, staticRenderFns: __vue_staticRenderFns__$1 },
    __vue_inject_styles__$1,
    __vue_script__$1,
    __vue_scope_id__$1,
    __vue_is_functional_template__$1,
    __vue_module_identifier__$1,
    false,
    undefined,
    undefined,
    undefined
  );

var script = {
    name: 'RenderComponentNameConfigEditor',
    mixins: [editorComponentMixin],
    data() {
        return {};
    },
    mounted() {},
    methods: {}
};

/* script */ var __vue_script__ = script;
/* template */
var __vue_render__ = function() {
  var _vm = this;
  var _h = _vm.$createElement;
  var _c = _vm._self._c || _h;
  return _c(
    "a-form-item",
    { attrs: { label: _vm.$t("自定义组件名称") } },
    [
      _c("a-input", {
        attrs: { placeholder: _vm.$t("请输入") },
        model: {
          value: _vm.editorValue,
          callback: function($$v) {
            _vm.editorValue = $$v;
          },
          expression: "editorValue"
        }
      })
    ],
    1
  )
};
var __vue_staticRenderFns__ = [];
__vue_render__._withStripped = true;

  /* style */
  var __vue_inject_styles__ = undefined;
  /* scoped */
  var __vue_scope_id__ = "data-v-63858ee5";
  /* module identifier */
  var __vue_module_identifier__ = undefined;
  /* functional template */
  var __vue_is_functional_template__ = false;
  /* style inject */
  
  /* style inject SSR */
  
  /* style inject shadow dom */
  

  
  var __vue_component__ = /*#__PURE__*/normalizeComponent(
    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
    __vue_inject_styles__,
    __vue_script__,
    __vue_scope_id__,
    __vue_is_functional_template__,
    __vue_module_identifier__,
    false,
    undefined,
    undefined,
    undefined
  );

var editorComponents = [__vue_component__$U, __vue_component__$T, __vue_component__$S, __vue_component__$R, __vue_component__$P, __vue_component__$O, __vue_component__$N, __vue_component__$M, __vue_component__$L, __vue_component__$K, __vue_component__$J, __vue_component__$I, __vue_component__$H, __vue_component__$G, __vue_component__$F, __vue_component__$E, __vue_component__$D, __vue_component__$C, __vue_component__$B, __vue_component__$A, __vue_component__$z, __vue_component__$y, __vue_component__$x, __vue_component__$w, __vue_component__$t, __vue_component__$s, __vue_component__$q, __vue_component__$p, __vue_component__$r, __vue_component__$m, __vue_component__$l, __vue_component__$k, __vue_component__$j, __vue_component__$i, __vue_component__$h, __vue_component__$g, __vue_component__$e, __vue_component__$f, __vue_component__$d, __vue_component__$c, __vue_component__$b, __vue_component__$o, __vue_component__$a, __vue_component__$9, __vue_component__$3, __vue_component__$2, __vue_component__$1, __vue_component__$n, __vue_component__];
var install = function install(Vue, options) {
    _forEachInstanceProperty(editorComponents).call(editorComponents, function (item) {
        Vue.component(item.name, item);
    });
};
var index = {
    install: install,
    CountStatistics: __vue_component__$U,
    AfterSaveReset: __vue_component__$T,
    ConfigOpenTypeConfig: __vue_component__$S,
    LinkedOrderConfig: __vue_component__$R,
    DocumentNumberRuleConfigEditor: __vue_component__$P,
    TableInfoEditor: __vue_component__$O,
    FormLabelInputEditor: __vue_component__$N,
    FormInputTypeEditor: __vue_component__$M,
    SelectIsUserAttrEditor: __vue_component__$b,
    TableAssociatedField: __vue_component__$2
};

module.exports = index;
